diff --git a/.babelrc b/.babelrc index d0c035b5..598021f0 100644 --- a/.babelrc +++ b/.babelrc @@ -2,14 +2,12 @@ "presets": [ "@babel/env", "@babel/react", - "@babel/flow", - "@babel/typescript" + "@babel/flow" ], "plugins": [ "@babel/plugin-transform-runtime", "@babel/plugin-syntax-dynamic-import", "@babel/plugin-proposal-object-rest-spread", - ["@babel/plugin-proposal-class-properties", { "loose": true }], "lodash" ] } diff --git a/.eslintignore b/.eslintignore index 4e024dc0..19313872 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,7 @@ -src/demoData/* +node_modules/* +static/* +dist/* +scripts/ +cypress/ +deploy/ +lib/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..6b5a1269 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,44 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint'], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + 'prettier/@typescript-eslint', + 'plugin:testing-library/react', + ], + rules: { + 'keyword-spacing': 2, + 'switch-colon-spacing': ['error', { after: true, before: false }], + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unused-vars': 'off', + 'no-case-declarations': 'off', + 'no-var-requires': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/camelcase': 'off', + 'no-prototype-builtins': 'off', + 'no-useless-escape': 'off', + 'no-useless-catch': 'off', + }, + parserOptions: { + ecmaVersion: 2016, + sourceType: 'module', + }, + settings: { + react: { + version: 'detect', + }, + }, + globals: { + "window": true, + "document": true, + "global": true, + "insights": true, + } +}; \ No newline at end of file diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index c6b15675..00000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,121 +0,0 @@ -parser: babel-eslint -env: - browser: true - node: true - es6: true -settings: - react: - version: '16.0' -extends: - - 'eslint:recommended' - - 'prettier' - - 'plugin:react/recommended' -parserOptions: - ecmaVersion: 7 - sourceType: module -globals: - beforeAll: true - describe: true - expect: true - global: true - insights: true - it: true - mount: true - process: true - render: true - shallow: true - React: true -rules: - array-bracket-spacing: - - error - - always - - objectsInArrays: false - comma-dangle: 2 - comma-spacing: - - 2 - - after: true - comma-style: 2 - camelcase: 2 - curly: - - error - - all - dot-notation: 2 - eol-last: 2 - eqeqeq: 2 - func-names: - - error - - never - indent: - - error - - 4 - - SwitchCase: 1 - MemberExpression: 0 - ImportDeclaration: 1 - ObjectExpression: 1 - react/jsx-curly-spacing: - - ignore - - always - - children: true - - allowMultiline: false - - spacing: - - objectLiterals: - - never - key-spacing: 2 - keyword-spacing: 2 - linebreak-style: - - error - - unix - max-len: - - 2 - - 150 - new-cap: 2 - no-bitwise: 2 - no-caller: 2 - no-mixed-spaces-and-tabs: 2 - no-multiple-empty-lines: - - error - - max: 1 - no-trailing-spaces: 2 - no-use-before-define: - - error - - functions: false - no-undef: 2 - no-unused-vars: 2 - no-var: 2 - no-with: 2 - object-shorthand: 2 - object-curly-spacing: - - error - - always - - objectsInObjects: false - arraysInObjects: false - one-var: - - error - - never - padding-line-between-statements: - - error - - blankLine: always - prev: block-like - next: "*" - quote-props: - - error - - as-needed - quotes: - - error - - single - - allowTemplateLiterals: true - semi: - - error - - always - space-before-blocks: 2 - space-in-parens: 2 - space-infix-ops: 2 - space-unary-ops: - - error - - words: false - nonwords: false - vars-on-top: 2 - wrap-iife: 2 - yoda: - - error - - never diff --git a/.prettierignore b/.prettierignore index 2ff8622f..2a616051 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1 @@ -package.json \ No newline at end of file +*.yaml \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 427600fa..00000000 --- a/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "singleQuote": true, - "printWidth": 120, - "tabWidth": 4 -} \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..359095e4 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,9 @@ +module.exports = { + bracketSpacing: true, + printWidth: 100, + semi: true, + singleQuote: true, + tabWidth: 2, + trailingComma: 'es5', +}; + \ No newline at end of file diff --git a/README.md b/README.md index 46c01bc0..1baf5cc9 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,6 @@ git clone https://github.com/project-xavier/xavier-ui.git cd xavier-ui npm ci -git clone https://github.com/RedHatInsights/insights-chrome -cd insights-chrome -npm ci - git clone https://github.com/RedHatInsights/insights-proxy.git cd insights-proxy npm install @@ -48,19 +44,11 @@ npm ci # Always execute this when package.json changed npm run start ``` -### insights-chrome - -```shell -cd insights-chrome -npm run build -npm run start -``` - ### insights-proxy Move to insight-chrome/build folder and then execute: ```shell -cd insights-chrome/build -SPANDX_CONFIG=../../xavier-ui/profiles/local-frontend-and-api.js LOCAL_CHROME=true sh ../../insights-proxy/scripts/run.sh +cd insights-proxy +SPANDX_CONFIG=../xavier-ui/profiles/local-frontend-and-api.js sh scripts/run.sh ``` # Open you browser diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..ea583c19 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,97 @@ +require.extensions['.css'] = () => undefined; +const path = require('path'); +const glob = require('glob'); + +// Mapper for Patternly components +const mapper = { + TextVariants: 'Text', + DropdownPosition: 'dropdownConstants', + EmptyStateVariant: 'EmptyState', + TextListItemVariants: 'TextListItem', + TextListVariants: 'TextList' +}; + +// Wrapper for Patternfly icons +const iconMapper = {} + +// Mapper for cloud-services components +const FECMapper = { + SkeletonSize: 'Skeleton', + PageHeaderTitle: 'PageHeader' +}; + +module.exports = { + presets: [ + '@babel/env', + '@babel/react' + ], + plugins: [ + '@babel/plugin-transform-runtime', + '@babel/plugin-syntax-dynamic-import', + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-proposal-class-properties', + 'lodash', + [ + 'transform-imports', + { + '@patternfly/react-core': { + transform: (importName) => { + const files = glob.sync( + path.resolve( + __dirname, + `./node_modules/@patternfly/react-core/dist/js/**/${mapper[ + importName + ] || importName}.js` + ) + ); + if (files.length > 0) { + return files[0].replace(/.*(?=@patternfly)/, ''); + } else { + throw `File with importName ${importName} does not exist`; + } + }, + preventFullImport: false, + skipDefaultConversion: true + } + }, + 'react-core' + ], + [ + 'transform-imports', + { + '@patternfly/react-icons': { + transform: (importName) => + `@patternfly/react-icons/dist/js/icons/${importName + .split(/(?=[A-Z])/) + .join('-') + .toLowerCase()}`, + preventFullImport: true + } + }, + 'react-icons' + ], + [ + 'transform-imports', + { + '@redhat-cloud-services/frontend-components': { + transform: (importName) => + `@redhat-cloud-services/frontend-components/components/cjs/${FECMapper[importName] || importName}`, + preventFullImport: false, + skipDefaultConversion: true + } + }, + 'frontend-components' + ], + [ + 'transform-imports', + { + '@redhat-cloud-services/frontend-components-notifications': { + transform: (importName) => + `@redhat-cloud-services/frontend-components-notifications/cjs/${importName}`, + preventFullImport: true + } + }, + 'frontend-notifications' + ] + ] +}; \ No newline at end of file diff --git a/config/base.webpack.config.js b/config/base.webpack.config.js deleted file mode 100644 index 482ac268..00000000 --- a/config/base.webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -/* global require, module, __dirname */ - -const path = require('path'); -const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); - -const webpackConfig = { - resolve: { - extensions: [ '.ts', '.tsx', '.js' ], - plugins: [ - new TsconfigPathsPlugin({ - configFile: path.resolve(__dirname, '../tsconfig.json') - }) - ], - symlinks: false, - cacheWithContext: false - } -}; - -module.exports = webpackConfig; diff --git a/config/base.webpack.rules.js b/config/base.webpack.rules.js deleted file mode 100644 index 77b38e21..00000000 --- a/config/base.webpack.rules.js +++ /dev/null @@ -1,25 +0,0 @@ -/* global require, module, __dirname */ - -const path = require('path'); - -const webpackConfig = { - module: { - rules: [ - { - test: /\.(tsx|ts)?$/, - include: path.resolve(__dirname, '../src'), - use: [ - { - loader: 'ts-loader', - options: { - transpileOnly: true, - experimentalWatchApi: true - } - } - ].filter(Boolean) - } - ] - } -}; - -module.exports = webpackConfig; diff --git a/config/dev.webpack.config.js b/config/dev.webpack.config.js index 7d6b64ea..2eb1cb19 100644 --- a/config/dev.webpack.config.js +++ b/config/dev.webpack.config.js @@ -2,12 +2,12 @@ const { resolve } = require('path'); const config = require('@redhat-cloud-services/frontend-components-config'); const { config: webpackConfig, plugins } = config({ - rootFolder: resolve(__dirname, '../'), - debug: true, - https: true + rootFolder: resolve(__dirname, '../'), + debug: true, + https: true, }); module.exports = { - ...webpackConfig, - plugins + ...webpackConfig, + plugins, }; diff --git a/config/prod.webpack.config.js b/config/prod.webpack.config.js index 568d9cd2..bd9aefed 100644 --- a/config/prod.webpack.config.js +++ b/config/prod.webpack.config.js @@ -2,10 +2,10 @@ const { resolve } = require('path'); const config = require('@redhat-cloud-services/frontend-components-config'); const { config: webpackConfig, plugins } = config({ - rootFolder: resolve(__dirname, '../') + rootFolder: resolve(__dirname, '../'), }); module.exports = { - ...webpackConfig, - plugins + ...webpackConfig, + plugins, }; diff --git a/config/spandx.config.js b/config/spandx.config.js deleted file mode 100644 index 8d276bf6..00000000 --- a/config/spandx.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/*global module, process*/ - -// This is a sample configuration for running the starter app locally. - -// Hack so that Mac OSX docker can sub in host.docker.internal instead of localhost -// see https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host -const localhost = (process.env.PLATFORM === 'linux') ? 'localhost' : 'host.docker.internal'; - -module.exports = { - routes: { - '/apps/migration-analytics': { host: `http://${localhost}:8002` }, - '/migrations/migration-analytics': { host: `http://${localhost}:8002` } - } -}; diff --git a/config/test.webpack.config.js b/config/test.webpack.config.js index 568d9cd2..bd9aefed 100644 --- a/config/test.webpack.config.js +++ b/config/test.webpack.config.js @@ -2,10 +2,10 @@ const { resolve } = require('path'); const config = require('@redhat-cloud-services/frontend-components-config'); const { config: webpackConfig, plugins } = config({ - rootFolder: resolve(__dirname, '../') + rootFolder: resolve(__dirname, '../'), }); module.exports = { - ...webpackConfig, - plugins + ...webpackConfig, + plugins, }; diff --git a/jest.config.js b/jest.config.js index cf15ca59..11eeb37c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,26 +4,26 @@ module.exports = { // Automatically clear mock calls and instances between every test clearMocks: true, - + // Indicates whether the coverage information should be collected while executing the test collectCoverage: true, - + // The directory where Jest should output its coverage files coverageDirectory: 'coverage', - + // An array of directory names to be searched recursively up from the requiring module's location moduleDirectories: [ "node_modules", "/src" ], - + // An array of file extensions your modules use moduleFileExtensions: [ "ts", "tsx", "js" ], - + // A map from regular expressions to module names that allow to stub out resources with a single module moduleNameMapper: { '\\.(css|scss|less)$': '/__mocks__/styleMock.js', @@ -31,16 +31,16 @@ module.exports = { "@app/(.*)": '/src/app/$1', "^lodash-es$": "lodash" }, - + // A preset that is used as a base for Jest's configuration preset: "ts-jest/presets/js-with-ts", - + // The path to a module that runs some code to configure or set up the testing framework before each test - setupFilesAfterEnv: ['/test-setup.js'], - + setupFilesAfterEnv: ['/config/setupTests.js'], + // The test environment that will be used for testing. testEnvironment: "jsdom", - + // A list of paths to snapshot serializer modules Jest should use for snapshot testing snapshotSerializers: ['enzyme-to-json/serializer'], @@ -53,4 +53,4 @@ module.exports = { transform: { "^.+\\.(ts|tsx)$": "ts-jest" } - }; \ No newline at end of file +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index acb18254..7c40c615 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,54 +5,70 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.10.4" } }, + "@babel/compat-data": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.5.tgz", + "integrity": "sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg==", + "dev": true + }, "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "dev": true, "requires": { - "ms": "^2.1.1" + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" } }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -62,18 +78,33 @@ } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", "dev": true, "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.12.5", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "source-map": "^0.5.0" }, "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -83,116 +114,336 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-builder-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", - "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", "dev": true, "requires": { - "@babel/types": "^7.3.0", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz", + "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", + "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", - "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.1" } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-module-imports": { @@ -205,778 +456,1313 @@ } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "dev": true, "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.11.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "dev": true + }, "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", "dev": true, "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz", - "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz", + "integrity": "sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-flow": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", - "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz", + "integrity": "sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", - "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-typescript": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", - "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", + "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz", - "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz", + "integrity": "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-flow": "^7.12.1" } }, "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", "dev": true, "requires": { - "regexp-tree": "^0.1.6" + "@babel/helper-create-regexp-features-plugin": "^7.12.1" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" } }, "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", - "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", - "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz", + "integrity": "sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ==", "dev": true, "requires": { - "@babel/helper-builder-react-jsx": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.12.1" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.5.tgz", + "integrity": "sha512-1JJusg3iPgsZDthyWiCr3KQiGs31ikU/mSf2N2dSYEAO0GEImmVUbWf0VoSDGDFTAn5Dj4DUiR6SdIXHY7tELA==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.12.1" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", - "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", + "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", - "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", + "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", "dev": true, "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", + "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typescript": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz", - "integrity": "sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", + "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-typescript": "^7.2.0" + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-typescript": "^7.12.1" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/preset-env": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", - "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", "semver": "^5.5.0" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/preset-flow": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.0.0.tgz", - "integrity": "sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.12.1.tgz", + "integrity": "sha512-UAoyMdioAhM6H99qPoKvpHMzxmNVXno8GYU/7vZmGaHk6/KqfDYL1W0NxszVbJ2EP271b7e6Ox+Vk2A9QsB3Sw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-flow-strip-types": "^7.12.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.5.tgz", + "integrity": "sha512-jcs++VPrgyFehkMezHtezS2BpnUlR7tQFAyesJn1vGTO9aTFZrgIQrA5YydlTwxbcjMwkFY6i04flCigRRr3GA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.12.1", + "@babel/plugin-transform-react-jsx": "^7.12.5", + "@babel/plugin-transform-react-jsx-development": "^7.12.5", + "@babel/plugin-transform-react-jsx-self": "^7.12.1", + "@babel/plugin-transform-react-jsx-source": "^7.12.1", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" } }, "@babel/preset-typescript": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz", - "integrity": "sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.3.2" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.12.1" } }, "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" }, "dependencies": { "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" } } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.5", + "@babel/types": "^7.12.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.19" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", "dev": true, "requires": { - "ms": "^2.1.1" + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true } } }, @@ -991,215 +1777,695 @@ "to-fast-properties": "^2.0.0" } }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", "dev": true, "requires": { "exec-sh": "^0.3.2", "minimist": "^1.2.0" } }, - "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", - "dev": true, - "requires": { - "@jest/source-map": "^24.3.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "@eslint/eslintrc": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "strip-ansi": "^5.0.0" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } - } - } - }, - "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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 + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", "dev": true, "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, - "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", - "slash": "^2.0.0", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", "source-map": "^0.6.0", - "string-length": "^2.0.0" + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", "dev": true, "requires": { "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.4", "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + } } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", - "@types/istanbul-lib-coverage": "^2.0.0" + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + } } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", - "micromatch": "^3.1.10", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } } }, "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", "dev": true, "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", "dev": true }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@patternfly/patternfly": { "version": "4.10.31", "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-4.10.31.tgz", @@ -1338,9 +2604,9 @@ } }, "@redhat-cloud-services/frontend-components-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@redhat-cloud-services/frontend-components-config/-/frontend-components-config-2.1.0.tgz", - "integrity": "sha512-XYAFHAjIDSRf0kydIY96AYk0QLnrOBZgV4aAgWrPFLcnYY0MexJXss0skq/iCm+vmMtjHlsQPIoir+uUD0atKw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@redhat-cloud-services/frontend-components-config/-/frontend-components-config-2.1.8.tgz", + "integrity": "sha512-6CkLvjb64lbvz3L8a3D4bk5PJCl89SLDffQKYqPhrtEtZ0k8b9fdEfttia+cyI29Q7oVHQouLqIe+iHWpwRejQ==", "dev": true, "requires": { "babel-loader": "^8.0.6", @@ -1356,6 +2622,7 @@ "lodash-webpack-plugin": "^0.11.5", "mini-css-extract-plugin": "^0.6.0", "node-sass": "^4.12.0", + "react-router-sitemap": "^1.2.0", "sass-loader": "^7.1.0", "source-map-loader": "^0.2.4", "style-loader": "^0.23.1", @@ -1366,13 +2633,23 @@ "write-file-webpack-plugin": "^4.5.0" }, "dependencies": { - "clean-webpack-plugin": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-2.0.2.tgz", - "integrity": "sha512-pi1111o4OBd9qvacbgs+NRqClfVPKVIc66B4d8kx6Ho/L+i9entQ/NpK600CsTYTPu3kWvKwwyKarsYMvC2xeA==", + "css-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", + "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", "dev": true, "requires": { - "del": "^4.0.0" + "camelcase": "^5.2.0", + "icss-utils": "^4.1.0", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.6", + "postcss-modules-scope": "^2.1.0", + "postcss-modules-values": "^2.0.0", + "postcss-value-parser": "^3.3.0", + "schema-utils": "^1.0.0" } }, "eslint-loader": { @@ -1410,6 +2687,25 @@ "webpack-sources": "^1.1.0" } }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "sass-loader": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^6.3.0" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -1421,6 +2717,12 @@ "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "style-loader": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", @@ -1430,29 +2732,28 @@ "loader-utils": "^1.1.0", "schema-utils": "^1.0.0" } + }, + "ts-loader": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.2.tgz", + "integrity": "sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + } } } }, "@redhat-cloud-services/frontend-components-notifications": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-2.1.1.tgz", - "integrity": "sha512-iufWE31xDdt3MpSQDSqdhVyTtZm7vxjwm9wJL7mWNf86anzGmt7qvGy7Gi7n3YHQZKhSlYqNaE7mReG7qps/cQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-2.2.3.tgz", + "integrity": "sha512-ERqumLKIYsZ96WINj8mK1gnaXJsgHCOItX8xp6/MS5C8BQ+h8U/R3KO54HR0XqBZzI8/zFXTBUDmRPlb6gE4TA==", "requires": { - "@redhat-cloud-services/frontend-components-utilities": "2.1.0-beta" - }, - "dependencies": { - "@redhat-cloud-services/frontend-components-utilities": { - "version": "2.1.0-beta", - "resolved": "https://registry.npmjs.org/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-2.1.0-beta.tgz", - "integrity": "sha512-4qF+ElZaBRXnWtdpIY/VF2TA4sGTkHbHUQVy3gV6Uu1h2YHpuxhKuiJhB/Gq/BgPmkU7yVV2Dpm//iCe6ObOUg==", - "requires": { - "@sentry/browser": "^5.4.0", - "awesome-debounce-promise": "^2.1.0", - "axios": "^0.19.0", - "commander": ">=2.20.0", - "react-content-loader": ">=3.4.1" - } - } + "@redhat-cloud-services/frontend-components-utilities": "*" } }, "@redhat-cloud-services/frontend-components-utilities": { @@ -1534,6 +2835,23 @@ "http-errors": "^1.6.1", "mz": "^2.6.0", "resolve-path": "^1.3.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "@shellscape/koa-static": { @@ -1544,12 +2862,66 @@ "requires": { "@shellscape/koa-send": "^4.1.0", "debug": "^2.6.8" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "@sinonjs/commons": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", + "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "dev": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "dev": true, + "requires": { + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" } }, "@types/babel__core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", - "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", + "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -1560,18 +2932,18 @@ } }, "@types/babel__generator": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", - "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -1579,18 +2951,18 @@ } }, "@types/babel__traverse": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", - "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", + "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/cheerio": { - "version": "0.22.11", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.11.tgz", - "integrity": "sha512-x0X3kPbholdJZng9wDMhb2swvUi3UYRNAuWAmIPIWlfgAJZp//cql/qblE7181Mg7SjWVwq6ldCPCLn5AY/e7w==", + "version": "0.22.22", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.22.tgz", + "integrity": "sha512-05DYX4zU96IBfZFY+t3Mh88nlwSMtmmzSYaQkKN48T495VV1dkHSah6qYyDTN5ngaS0i0VonH37m+RuzSM0YiA==", "dev": true, "requires": { "@types/node": "*" @@ -1607,94 +2979,104 @@ "integrity": "sha512-MRQEy2LooG621ln0JOQXjcVIZWWY2VkefIxeO1cpO57tCnYAQdmq+b7CMw7pQC6RCc1itfcdwJKdF9/y4cLoZA==" }, "@types/enzyme": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.9.3.tgz", - "integrity": "sha512-jDKoZiiMA3lGO3skSO7dfqEHNvmiTLLV+PHD9EBQVlJANJvpY6qq1zzjRI24ZOtG7F+CS7BVWDXKewRmN8PjHQ==", + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.8.tgz", + "integrity": "sha512-vlOuzqsTHxog6PV79+tvOHFb6hq4QZKMq1lLD9MaWD1oec2lHTKndn76XOpSwCA0oFTaIbKVPrgM3k78Jjd16g==", "dev": true, "requires": { "@types/cheerio": "*", "@types/react": "*" } }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { - "@types/events": "*", "@types/minimatch": "*", "@types/node": "*" } }, + "@types/graceful-fs": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", + "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", - "integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==" + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", + "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==", + "dev": true }, "@types/hoist-non-react-statics": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dev": true, "requires": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" } }, "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "24.0.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz", - "integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", + "version": "26.0.15", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz", + "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==", + "dev": true, "requires": { - "@types/jest-diff": "*" + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" } }, - "@types/jest-diff": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", - "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, "@types/lodash": { - "version": "4.14.132", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.132.tgz", - "integrity": "sha512-RNUU1rrh85NgUJcjOOr96YXr+RHwInGbaQCZmlitqOaCKXffj8bh+Zxwuq5rjDy5OgzFldDVoqk4pyLEDiwxIw==" + "version": "4.14.165", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz", + "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==", + "dev": true + }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, + "requires": { + "@types/unist": "*" + } }, "@types/minimatch": { "version": "3.0.3", @@ -1702,68 +3084,88 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true + }, "@types/node": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.3.tgz", - "integrity": "sha512-zkOxCS/fA+3SsdA+9Yun0iANxzhQRiNwTvJSr6N95JhuJ/x27z9G2URx1Jpt3zYFfCGUXZGL5UDxt5eyLE7wgw==" + "version": "12.19.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.5.tgz", + "integrity": "sha512-Wgdl27uw/jUYUFyajUGKSjDNGxmJrZi9sjeG6UJImgUtKbJoO9aldx+1XODN1EpNDX9DirvbvHHmTsNlb8GwMA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prettier": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", + "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", + "dev": true }, "@types/prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true }, "@types/react": { - "version": "16.8.19", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.19.tgz", - "integrity": "sha512-QzEzjrd1zFzY9cDlbIiFvdr+YUmefuuRYrPxmkwG0UQv5XF35gFIi7a95m1bNVcFU0VimxSZ5QVGSiBmlggQXQ==", + "version": "16.9.56", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz", + "integrity": "sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==", + "dev": true, "requires": { "@types/prop-types": "*", - "csstype": "^2.2.0" + "csstype": "^3.0.2" } }, "@types/react-dom": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.4.tgz", - "integrity": "sha512-eIRpEW73DCzPIMaNBDP5pPIpK1KXyZwNgfxiVagb5iGiz6da+9A5hslSX6GAQKdO7SayVCS/Fr2kjqprgAvkfA==", + "version": "16.9.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.9.tgz", + "integrity": "sha512-jE16FNWO3Logq/Lf+yvEAjKzhpST/Eac8EMd1i4dgZdMczfgqC8EjpxwNgEe3SExHYLliabXDh9DEhhqnlXJhg==", + "dev": true, "requires": { "@types/react": "*" } }, "@types/react-redux": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.0.9.tgz", - "integrity": "sha512-fMVX9SneWWw68d/JoeNUh6hj42kx2G30YhPdCYJTOv3xqbJ1xzIz6tEM/xzi7nBvpNbwZkSa9TMsV06kWOFIIg==", + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.11.tgz", + "integrity": "sha512-OjaFlmqy0CRbYKBoaWF84dub3impqnLJUrz4u8PRjDzaa4n1A2cVmjMV81shwXyAD5x767efhA8STFGJz/r1Zg==", + "dev": true, "requires": { "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", "hoist-non-react-statics": "^3.3.0", "redux": "^4.0.0" - }, - "dependencies": { - "redux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", - "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - } } }, "@types/react-router": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.0.1.tgz", - "integrity": "sha512-vOyVO0u3Cs0w6G5DzYqNVqcTsurEnDgOmmkJf2s7VwtunWzpPgI6dHsCBX68vXqeICpP6jCfojgJcHkm5BV7hQ==", + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.8.tgz", + "integrity": "sha512-HzOyJb+wFmyEhyfp4D4NYrumi+LQgQL/68HvJO+q6XtuHSDvw6Aqov7sCAhjbNq3bUPgPqbdvjXC5HeB2oEAPg==", + "dev": true, "requires": { "@types/history": "*", "@types/react": "*" } }, "@types/react-router-dom": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.3.tgz", - "integrity": "sha512-xj0DmFjgvAqRfh/kJPO7apD5G30yPQe+8slu/dugioQOkdKpyzc4Fgk4hoTelm6CSHz7pI2PPsW5+Y6GRBF2zw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.5.tgz", + "integrity": "sha512-eFajSUASYbPHg2BDM1G8Btx+YqGgvROPIg6sBhl3O4kbDdYXdFdfrgQFf/pcBuQVObjfT9AL/dd15jilR5DIEA==", + "dev": true, "requires": { "@types/history": "*", "@types/react": "*", @@ -1771,17 +3173,18 @@ } }, "@types/redux-logger": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/redux-logger/-/redux-logger-3.0.7.tgz", - "integrity": "sha512-oV9qiCuowhVR/ehqUobWWkXJjohontbDGLV88Be/7T4bqMQ3kjXwkFNL7doIIqlbg3X2PC5WPziZ8/j/QHNQ4A==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/redux-logger/-/redux-logger-3.0.8.tgz", + "integrity": "sha512-zM+cxiSw6nZtRbxpVp9SE3x/X77Z7e7YAfHD1NkxJyJbAGSXJGF0E9aqajZfPOa/sTYnuwutmlCldveExuCeLw==", + "dev": true, "requires": { - "redux": "^3.6.0" + "redux": "^4.0.0" } }, "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, "@types/unist": { @@ -1790,206 +3193,336 @@ "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", "dev": true }, - "@types/vfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", - "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "@types/yargs": { + "version": "15.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz", + "integrity": "sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==", "dev": true, "requires": { - "@types/node": "*", - "@types/unist": "*", - "@types/vfile-message": "*" + "@types/yargs-parser": "*" } }, - "@types/vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz", + "integrity": "sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ==", "dev": true, "requires": { - "@types/node": "*", - "@types/unist": "*" + "@typescript-eslint/experimental-utils": "4.8.1", + "@typescript-eslint/scope-manager": "4.8.1", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } } }, - "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "@typescript-eslint/experimental-utils": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz", + "integrity": "sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.8.1", + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/typescript-estree": "4.8.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.8.1.tgz", + "integrity": "sha512-QND8XSVetATHK9y2Ltc/XBl5Ro7Y62YuZKnPEwnNPB8E379fDsvzJ1dMJ46fg/VOmk0hXhatc+GXs5MaXuL5Uw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.8.1", + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/typescript-estree": "4.8.1", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz", + "integrity": "sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/visitor-keys": "4.8.1" + } + }, + "@typescript-eslint/types": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz", + "integrity": "sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==", "dev": true }, + "@typescript-eslint/typescript-estree": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz", + "integrity": "sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/visitor-keys": "4.8.1", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz", + "integrity": "sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.8.1", + "eslint-visitor-keys": "^2.0.0" + } + }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -2080,9 +3613,9 @@ "dev": true }, "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "abbrev": { @@ -2102,58 +3635,80 @@ } }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "airbnb-prop-types": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz", - "integrity": "sha512-2FN6DlHr6JCSxPPi25EnqGaXC4OC3/B3k1lCd6MMYrZ51/Gf/1qDfaR+JElzWa+Tl7cY2aYOlsYJGFeQyVHIeQ==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", + "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", "dev": true, "requires": { - "array.prototype.find": "^2.0.4", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", + "array.prototype.find": "^2.1.1", + "function.prototype.name": "^1.1.2", + "is-regex": "^1.1.0", + "object-is": "^1.1.2", "object.assign": "^4.1.0", - "object.entries": "^1.1.0", + "object.entries": "^1.1.2", "prop-types": "^15.7.2", "prop-types-exact": "^1.2.0", - "react-is": "^16.8.6" + "react-is": "^16.13.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } } }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -2166,9 +3721,9 @@ "dev": true }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, "amdefine": { @@ -2184,14 +3739,64 @@ "dev": true, "requires": { "string-width": "^2.0.0" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -2226,6 +3831,120 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "app-root-path": { @@ -2241,9 +3960,9 @@ "dev": true }, "arch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz", - "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true }, "are-we-there-yet": { @@ -2283,12 +4002,6 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, "array-filter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", @@ -2302,19 +4015,73 @@ "dev": true }, "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "array-map": { @@ -2351,24 +4118,197 @@ "dev": true }, "array.prototype.find": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", - "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", + "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.13.0" + "es-abstract": "^1.17.4" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "array.prototype.flat": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", - "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "arrify": { @@ -2392,14 +4332,23 @@ } }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "assert": { @@ -2441,12 +4390,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -2454,12 +4397,12 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "async-each": { @@ -2475,9 +4418,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { @@ -2500,6 +4443,29 @@ "core-js": "^2.5.0" } }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "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 + } + } + }, "awesome-debounce-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/awesome-debounce-promise/-/awesome-debounce-promise-2.1.0.tgz", @@ -2531,9 +4497,9 @@ "dev": true }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "axios": { @@ -2580,80 +4546,188 @@ "dev": true }, "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", - "dev": true, - "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" }, "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } } } }, - "babel-plugin-dual-import": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-dual-import/-/babel-plugin-dual-import-1.2.1.tgz", - "integrity": "sha512-kQc0GTggVxU8gV1PNkEYZiqa/QNzFjp2nZN0Rp0qd+8qGCKBtTTfFYUUHpDOVFuYzpAT5OVtWuRpVUe3IsyWDA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0-beta.33" - } - }, - "babel-plugin-istanbul": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", - "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-loader": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", + "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "babel-plugin-dual-import": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-dual-import/-/babel-plugin-dual-import-1.2.1.tgz", + "integrity": "sha512-kQc0GTggVxU8gV1PNkEYZiqa/QNzFjp2nZN0Rp0qd+8qGCKBtTTfFYUUHpDOVFuYzpAT5OVtWuRpVUe3IsyWDA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0-beta.33" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", "dev": true, "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" } }, @@ -2670,38 +4744,56 @@ "require-package-name": "^2.0.1" } }, - "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "babel-plugin-transform-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-imports/-/babel-plugin-transform-imports-2.0.0.tgz", + "integrity": "sha512-65ewumYJ85QiXdcB/jmiU0y0jg6eL6CdnDqQAqQ8JMOKh1E52VPG3NJzbVKWcgovUR5GBH8IWpCXQ7I8Q3wjgw==", "dev": true, "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" + "@babel/types": "^7.4", + "is-valid-path": "^0.1.1" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "babel-preset-current-node-syntax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", + "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" } }, "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "base": { @@ -2759,16 +4851,10 @@ } } }, - "base62": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz", - "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==", - "dev": true - }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "batch": { @@ -2787,15 +4873,15 @@ } }, "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "hoopy": "^0.1.2", - "tryer": "^1.0.0" + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" } }, "big.js": { @@ -2810,6 +4896,16 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -2820,15 +4916,15 @@ } }, "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", "dev": true }, "body-parser": { @@ -2847,6 +4943,35 @@ "qs": "6.7.0", "raw-body": "2.4.0", "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } } }, "bonjour": { @@ -2861,14 +4986,6 @@ "dns-txt": "^2.0.2", "multicast-dns": "^6.0.1", "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - } } }, "boolbase": { @@ -2877,12 +4994,6 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "bowser": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", - "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==", - "dev": true - }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -2898,11 +5009,42 @@ "widest-line": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } } } }, @@ -2925,32 +5067,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "brorand": { @@ -2960,28 +5082,11 @@ "dev": true }, "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -3020,28 +5125,55 @@ } }, "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "bn.js": "^4.1.0", + "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.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 + } } }, "browserify-zlib": { @@ -3054,14 +5186,16 @@ } }, "browserslist": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.1.tgz", - "integrity": "sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ==", + "version": "4.14.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", + "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000971", - "electron-to-chromium": "^1.3.137", - "node-releases": "^1.1.21" + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.591", + "escalade": "^3.1.1", + "node-releases": "^1.1.66" } }, "bs-logger": { @@ -3074,9 +5208,9 @@ } }, "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { "node-int64": "^0.4.0" @@ -3111,12 +5245,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -3124,32 +5252,11 @@ "dev": true }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - } - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -3177,11 +5284,15 @@ "ylru": "^1.2.0" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } }, "caller-callsite": { "version": "2.0.0", @@ -3190,14 +5301,6 @@ "dev": true, "requires": { "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } } }, "caller-path": { @@ -3210,9 +5313,9 @@ } }, "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, "camel-case": { @@ -3250,9 +5353,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000971", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", - "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==", + "version": "1.0.30001159", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", + "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==", "dev": true }, "capture-exit": { @@ -3276,18 +5379,6 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "ccount": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", - "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==", - "dev": true - }, - "chain-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.1.tgz", - "integrity": "sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg==", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3298,46 +5389,34 @@ "supports-color": "^5.3.0" } }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=", + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, "character-entities": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", - "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", - "dev": true - }, - "character-entities-html4": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz", - "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, "character-entities-legacy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", - "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, "character-reference-invalid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", - "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", "dev": true }, "cheerio": { @@ -3352,23 +5431,12 @@ "htmlparser2": "^3.9.1", "lodash": "^4.15.0", "parse5": "^3.0.1" - }, - "dependencies": { - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - } } }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -3385,18 +5453,79 @@ "upath": "^1.1.1" }, "dependencies": { - "normalize-path": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chrome-trace-event": { @@ -3409,9 +5538,9 @@ } }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, "cipher-base": { @@ -3424,6 +5553,12 @@ "safe-buffer": "^5.0.1" } }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3462,12 +5597,12 @@ } }, "clean-webpack-plugin": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", - "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-2.0.2.tgz", + "integrity": "sha512-pi1111o4OBd9qvacbgs+NRqClfVPKVIc66B4d8kx6Ho/L+i9entQ/NpK600CsTYTPu3kWvKwwyKarsYMvC2xeA==", "dev": true, "requires": { - "rimraf": "^2.6.1" + "del": "^4.0.0" } }, "cli-boxes": { @@ -3476,21 +5611,6 @@ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "dev": true }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, "clipboardy": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", @@ -3536,53 +5656,68 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "clone-regexp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", - "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, "requires": { - "is-regexp": "^1.0.0", - "is-supported-regexp-flag": "^1.0.0" + "is-regexp": "^2.0.0" } }, "co": { @@ -3597,10 +5732,10 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "collapse-white-space": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", - "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, "collection-visit": { @@ -3626,6 +5761,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3646,38 +5787,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", - "dev": true, - "requires": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -3685,12 +5794,12 @@ "dev": true }, "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "mime-db": ">= 1.40.0 < 2" + "mime-db": ">= 1.43.0 < 2" } }, "compression": { @@ -3708,10 +5817,19 @@ "vary": "~1.1.2" }, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } @@ -3735,12 +5853,12 @@ } }, "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", "dev": true, "requires": { - "dot-prop": "^4.1.0", + "dot-prop": "^4.2.1", "graceful-fs": "^4.1.2", "make-dir": "^1.0.0", "unique-string": "^1.0.0", @@ -3799,9 +5917,9 @@ "dev": true }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -3857,126 +5975,29 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "copy-webpack-plugin": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", - "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } - } - }, "core-js": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" }, "core-js-compat": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.3.tgz", - "integrity": "sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", + "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", "dev": true, "requires": { - "browserslist": "^4.6.0", - "core-js-pure": "3.1.3", - "semver": "^6.1.0" + "browserslist": "^4.14.6", + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } }, - "core-js-pure": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.3.tgz", - "integrity": "sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA==", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -3993,34 +6014,24 @@ "is-directory": "^0.3.1", "js-yaml": "^3.13.1", "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "create-error-class": { @@ -4079,13 +6090,12 @@ } }, "cross-fetch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", - "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", + "integrity": "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==", "dev": true, "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" + "node-fetch": "2.6.1" } }, "cross-spawn": { @@ -4126,51 +6136,60 @@ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, - "css-in-js-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", - "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", - "dev": true, - "requires": { - "hyphenate-style-name": "^1.0.2", - "isobject": "^3.0.1" - } - }, "css-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", - "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", "dev": true, "requires": { - "camelcase": "^5.2.0", - "icss-utils": "^4.1.0", + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", "loader-utils": "^1.2.3", "normalize-path": "^3.0.0", - "postcss": "^7.0.14", + "postcss": "^7.0.32", "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^2.0.6", - "postcss-modules-scope": "^2.1.0", - "postcss-modules-values": "^2.0.0", - "postcss-value-parser": "^3.3.0", - "schema-utils": "^1.0.0" + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" }, "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" } + }, + "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 + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -4199,15 +6218,33 @@ "dev": true }, "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "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 + } + } + }, "csstype": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.5.tgz", - "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz", + "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==", + "dev": true }, "currently-unhandled": { "version": "0.4.1", @@ -4219,9 +6256,9 @@ } }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, "d": { @@ -4234,79 +6271,11 @@ "type": "^1.0.1" } }, - "d3": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.9.2.tgz", - "integrity": "sha512-ydrPot6Lm3nTWH+gJ/Cxf3FcwuvesYQ5uk+j/kXEH/xbuYWYWTMAHTJQkyeuG8Y5WM5RSEYB41EctUrXQQytRQ==", - "dev": true, - "requires": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, "d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, - "d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", - "dev": true - }, - "d3-brush": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.6.tgz", - "integrity": "sha512-lGSiF5SoSqO5/mYGD5FAeGKKS62JdA1EV7HPrU2b5rTX4qEJJtpjaGLJngjnkewQy7UnGstnFd3168wpf5z76w==", - "dev": true, - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "dev": true, - "requires": { - "d3-array": "1", - "d3-path": "1" - } - }, "d3-collection": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", @@ -4317,88 +6286,16 @@ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz", "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==" }, - "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "dev": true, - "requires": { - "d3-array": "^1.1.1" - } - }, - "d3-dispatch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz", - "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==", - "dev": true - }, - "d3-drag": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz", - "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==", - "dev": true, - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "d3-dsv": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.1.1.tgz", - "integrity": "sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw==", - "dev": true, - "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - } - }, "d3-ease": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.5.tgz", "integrity": "sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==" }, - "d3-fetch": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz", - "integrity": "sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA==", - "dev": true, - "requires": { - "d3-dsv": "1" - } - }, - "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "dev": true, - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, "d3-format": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" }, - "d3-geo": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.3.tgz", - "integrity": "sha512-n30yN9qSKREvV2fxcrhmHUdXP9TNH7ZZj3C/qnaoU0cVf/Ea85+yT7HY7i8ySPwkwjCNYtmKqQFTvLFngfkItQ==", - "dev": true, - "requires": { - "d3-array": "1" - } - }, - "d3-hierarchy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", - "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==", - "dev": true - }, "d3-interpolate": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", @@ -4412,54 +6309,6 @@ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==" }, - "d3-polygon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.5.tgz", - "integrity": "sha512-RHhh1ZUJZfhgoqzWWuRhzQJvO7LavchhitSTHGu9oj6uuLFzYZVeBzaWTQ2qSO6bz2w55RMoOCf0MsLCDB6e0w==", - "dev": true - }, - "d3-quadtree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.6.tgz", - "integrity": "sha512-NUgeo9G+ENQCQ1LsRr2qJg3MQ4DJvxcDNCiohdJGHt5gRhBW6orIB5m5FJ9kK3HNL8g9F4ERVoBzcEwQBfXWVA==", - "dev": true - }, - "d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", - "dev": true - }, - "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "dev": true, - "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "d3-scale-chromatic": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz", - "integrity": "sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw==", - "dev": true, - "requires": { - "d3-color": "1", - "d3-interpolate": "1" - } - }, - "d3-selection": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.0.tgz", - "integrity": "sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==", - "dev": true - }, "d3-shape": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.5.tgz", @@ -4486,38 +6335,11 @@ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz", "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==" }, - "d3-transition": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.0.tgz", - "integrity": "sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==", - "dev": true, - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, "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==" }, - "d3-zoom": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.3.tgz", - "integrity": "sha512-xEBSwFx5Z9T3/VrwDkMt+mr0HCzv7XjpGURJ8lWmIC8wxe32L39eWHIasEe/e7Ox8MPU4p1hvH8PKN2olLzIBg==", - "dev": true, - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -4528,27 +6350,14 @@ } }, "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" } }, "debounce-promise": { @@ -4557,20 +6366,12 @@ "integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==" }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.1.2" } }, "decamelize": { @@ -4589,6 +6390,12 @@ "map-obj": "^1.0.0" } }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -4598,14 +6405,21 @@ "deep-diff": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", - "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=", - "dev": true + "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } }, "deep-extend": { "version": "0.6.0", @@ -4684,12 +6498,6 @@ } } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, "del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -4788,9 +6596,9 @@ "dev": true }, "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, "detect-node": { @@ -4799,34 +6607,10 @@ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dev": true, - "requires": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - } - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", "dev": true }, "diffie-hellman": { @@ -4838,15 +6622,31 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "path-type": "^3.0.0" + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } } }, "discontinuous-range": { @@ -4898,15 +6698,6 @@ "utila": "~0.4" } }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.1.2" - } - }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -4930,12 +6721,20 @@ "dev": true }, "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "requires": { - "webidl-conversions": "^4.0.2" + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } } }, "domhandler": { @@ -4958,18 +6757,18 @@ } }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dev": true, "requires": { "is-obj": "^1.0.0" } }, "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "duplexer3": { @@ -5007,21 +6806,21 @@ "dev": true }, "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", "dev": true }, "electron-to-chromium": { - "version": "1.3.139", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.139.tgz", - "integrity": "sha512-8cR7h6doIC/XLgPdsTM3BXpfWLzqrHS6jWrvWLsdZWZWFvVQQUJTbU/wUZsjRGK33OY5ZIiS1n6JbqowuWrmYg==", + "version": "1.3.601", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.601.tgz", + "integrity": "sha512-ctRyXD9y0mZu8pgeNwBUhLP3Guyr5YuqkfLKYmpTwYx7o9JtCEJme9JVX4xBXPr5ZNvr/iBXUvHLFEVJQThATg==", "dev": true }, "elliptic": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", - "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -5031,8 +6830,22 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -5060,107 +6873,175 @@ } }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } + } + }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "envify": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.1.tgz", - "integrity": "sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg=", - "dev": true, - "requires": { - "jstransform": "^11.0.3", - "through": "~2.3.4" - } - }, "enzyme": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", - "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", "dev": true, "requires": { - "array.prototype.flat": "^1.2.1", - "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.1.0", + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", "has": "^1.0.3", - "html-element-map": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.4", - "is-number-object": "^1.0.3", - "is-regex": "^1.0.4", - "is-string": "^1.0.4", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", "is-subset": "^0.1.1", "lodash.escape": "^4.0.1", "lodash.isequal": "^4.5.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "raf": "^3.4.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.1.2" + "string.prototype.trim": "^1.2.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "enzyme-adapter-react-16": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.13.2.tgz", - "integrity": "sha512-h0neTuAAFfQUgEZ+PPHVIMDFJ9+CGafI8AjojNlSVh4Fd1pLDgtl2OeVkm4yKF7RSgzrPAwugq4JW8Jjo2iRJA==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.5.tgz", + "integrity": "sha512-33yUJGT1nHFQlbVI5qdo5Pfqvu/h4qPwi1o0a6ZZsjpiqq92a3HjynDhwd1IeED+Su60HDWV8mxJqkTnLYdGkw==", "dev": true, "requires": { - "enzyme-adapter-utils": "^1.12.0", + "enzyme-adapter-utils": "^1.13.1", + "enzyme-shallow-equal": "^1.0.4", "has": "^1.0.3", "object.assign": "^4.1.0", - "object.values": "^1.1.0", + "object.values": "^1.1.1", "prop-types": "^15.7.2", - "react-is": "^16.8.6", + "react-is": "^16.13.1", "react-test-renderer": "^16.0.0-0", "semver": "^5.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } } }, "enzyme-adapter-utils": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz", - "integrity": "sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.1.tgz", + "integrity": "sha512-5A9MXXgmh/Tkvee3bL/9RCAAgleHqFnsurTYCbymecO4ohvtNO5zqIhHxV370t7nJAwaCfkgtffarKpC0GPt0g==", "dev": true, "requires": { - "airbnb-prop-types": "^2.13.2", - "function.prototype.name": "^1.1.0", + "airbnb-prop-types": "^2.16.0", + "function.prototype.name": "^1.1.2", "object.assign": "^4.1.0", - "object.fromentries": "^2.0.0", + "object.fromentries": "^2.0.2", "prop-types": "^15.7.2", - "semver": "^5.6.0" + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "enzyme-to-json": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz", - "integrity": "sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA==", + "enzyme-shallow-equal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", + "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", "dev": true, "requires": { - "lodash": "^4.17.4" + "has": "^1.0.3", + "object-is": "^1.1.2" + } + }, + "enzyme-to-json": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.1.tgz", + "integrity": "sha512-15tXuONeq5ORoZjV/bUo2gbtZrN2IH+Z6DvL35QmZyKHgbY1ahn6wcnLd9Xv9OjiwbAXiiP8MRZwbZrCv1wYNg==", + "dev": true, + "requires": { + "@types/cheerio": "^0.22.22", + "lodash": "^4.17.15", + "react-is": "^16.12.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } } }, "errno": { @@ -5238,6 +7119,12 @@ "ext": "^1.1.2" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -5250,147 +7137,428 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } } } }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", + "levn": "^0.4.1", + "lodash": "^4.17.19", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "ms": "^2.1.1" + "color-convert": "^2.0.1" } }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "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 + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" } }, + "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 + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "strip-ansi": { + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" } } } }, "eslint-config-prettier": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz", - "integrity": "sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "requires": { - "get-stdin": "^5.0.1" + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } } }, "eslint-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", - "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz", + "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==", "dev": true, "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "loader-utils": "^2.0.0", + "object-hash": "^2.0.3", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "object-hash": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", + "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", + "dev": true + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.13.0.tgz", - "integrity": "sha512-uA5LrHylu8lW/eAH3bEQe9YdzpPaFd9yAJTwTi/i/BKTD7j6aQMKVAdGM/ML72zD6womuSK7EiGtMKuK06lWjQ==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", "dev": true, "requires": { - "array-includes": "^3.0.3", + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.1.0", - "object.fromentries": "^2.0.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", "prop-types": "^15.7.2", - "resolve": "^1.10.1" + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" }, "dependencies": { "doctrine": { @@ -5401,74 +7569,218 @@ "requires": { "esutils": "^2.0.2" } + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } } } }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", "dev": true }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "eslint-plugin-testing-library": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.1.tgz", + "integrity": "sha512-nQIFe2muIFv2oR2zIuXE4vTbcFNx8hZKRzgHZqJg8rfopIWwoTwtlbCCNELT/jXzVe1uZF68ALGYoDXjLczKiQ==", "dev": true, "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "@typescript-eslint/experimental-utils": "^3.10.1" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "etag": { "version": "1.8.1", @@ -5477,15 +7789,15 @@ "dev": true }, "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true }, "eventsource": { @@ -5508,9 +7820,9 @@ } }, "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", "dev": true }, "execa": { @@ -5529,12 +7841,12 @@ } }, "execall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", - "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dev": true, "requires": { - "clone-regexp": "^1.0.0" + "clone-regexp": "^2.1.0" } }, "exit": { @@ -5558,6 +7870,15 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -5575,6 +7896,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -5588,17 +7915,43 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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 + } } }, "express": { @@ -5639,11 +7992,38 @@ "vary": "~1.1.2" }, "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, @@ -5657,9 +8037,9 @@ }, "dependencies": { "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", "dev": true } } @@ -5691,17 +8071,6 @@ } } }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -5774,29 +8143,46 @@ "dev": true }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { @@ -5805,6 +8191,21 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -5815,12 +8216,12 @@ } }, "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "requires": { - "bser": "^2.0.0" + "bser": "2.1.1" } }, "fbjs": { @@ -5845,20 +8246,11 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", @@ -5869,13 +8261,26 @@ } }, "file-loader": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", - "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", + "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", "dev": true, "requires": { "loader-utils": "^1.0.2", - "schema-utils": "^0.4.5" + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "file-selector": { @@ -5886,6 +8291,13 @@ "tslib": "^1.9.0" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -5893,26 +8305,12 @@ "dev": true }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "finalhandler": { @@ -5928,6 +8326,23 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "find-cache-dir": { @@ -5951,24 +8366,118 @@ } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" }, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } @@ -5982,12 +8491,23 @@ "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "flush-write-stream": { @@ -6015,24 +8535,10 @@ } }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", - "dev": true, - "requires": { - "debug": "^3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true }, "for-in": { "version": "1.0.2", @@ -6040,15 +8546,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -6067,15 +8564,15 @@ } }, "formik": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/formik/-/formik-1.5.7.tgz", - "integrity": "sha512-kZo8lS4WzfC2uivnSkE9DOuX9x+jVjCtIZOlb1A4lHGeURyuLt6eDfwGJzNlcP0lXIwmpANKzegiB8j60B54TA==", + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/formik/-/formik-1.5.8.tgz", + "integrity": "sha512-fNvPe+ddbh+7xiByT25vuso2p2hseG/Yvuj211fV1DbCjljUEG9OpgRpcb7g7O3kxHX/q31cbZDzMxJXPWSNwA==", "requires": { "create-react-context": "^0.2.2", "deepmerge": "^2.1.1", "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.11", - "lodash-es": "^4.17.11", + "lodash": "^4.17.14", + "lodash-es": "^4.17.14", "prop-types": "^15.6.1", "react-fast-compare": "^2.0.1", "tiny-warning": "^1.0.2", @@ -6113,6 +8610,25 @@ "readable-stream": "^2.0.0" } }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + } + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -6132,588 +8648,110 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", + "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "functions-have-names": "^1.2.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true }, - "chownr": { + "is-regex": { "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, - "optional": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "has-symbols": "^1.0.1" } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true } } }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", - "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "is-callable": "^1.1.3" - } - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "functions-have-names": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", + "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -6728,28 +8766,6 @@ "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } } }, "gaze": { @@ -6761,10 +8777,41 @@ "globule": "^1.0.0" } }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + } + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, "get-port": { @@ -6774,9 +8821,9 @@ "dev": true }, "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "dev": true }, "get-stream": { @@ -6804,9 +8851,9 @@ } }, "git-revision-webpack-plugin": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/git-revision-webpack-plugin/-/git-revision-webpack-plugin-3.0.3.tgz", - "integrity": "sha512-B2ixM0fY7VgR61ZRSXYrh0R57Er7RY+CZb+fja5OFe21Y5o9GgzQanMgdlcBwWZ+LoOVqxBogbDutTTYMXQDWw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/git-revision-webpack-plugin/-/git-revision-webpack-plugin-3.0.6.tgz", + "integrity": "sha512-vW/9dBahGbpKPcccy3xKkHgdWoH/cAPPc3lQw+3edl7b4j29JfNGVrja0a1d8ZoRe4nTN8GCPrF9aBErDnzx5Q==", "dev": true }, "glob": { @@ -6844,12 +8891,6 @@ } } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -6885,28 +8926,6 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, "globjoin": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", @@ -6914,9 +8933,9 @@ "dev": true }, "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", "dev": true, "requires": { "glob": "~7.1.1", @@ -6925,20 +8944,12 @@ } }, "gonzales-pe": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.4.tgz", - "integrity": "sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "requires": { - "minimist": "1.1.x" - }, - "dependencies": { - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", - "dev": true - } + "minimist": "^1.2.5" } }, "got": { @@ -6978,7 +8989,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true + "dev": true, + "optional": true }, "gud": { "version": "1.0.0", @@ -7004,23 +9016,11 @@ } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "handlebars": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.0.tgz", - "integrity": "sha512-xkRtOt3/3DzTKMOt3xahj2M/EqNhY988T+imYSlMgs5fVhLN2fmKVVj0LtEGmb+3UUYV5Qmm1052Mm3dIQxOvw==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -7028,15 +9028,21 @@ "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==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "harmony-reflect": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", @@ -7099,6 +9105,26 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -7111,13 +9137,39 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.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 + } } }, "hash.js": { @@ -7140,7 +9192,6 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz", "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==", - "dev": true, "requires": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", @@ -7203,27 +9254,33 @@ } }, "html-element-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz", - "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz", + "integrity": "sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==", "dev": true, "requires": { "array-filter": "^1.0.0" } }, "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "requires": { - "whatwg-encoding": "^1.0.1" + "whatwg-encoding": "^1.0.5" } }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "html-minifier": { @@ -7250,15 +9307,15 @@ } }, "html-replace-webpack-plugin": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/html-replace-webpack-plugin/-/html-replace-webpack-plugin-2.5.5.tgz", - "integrity": "sha512-yEDPhbtG6LPlh+RFZsKZVKap6XJ/x7D/cg6BZuS3Bj9M2k18fK26x6QQi1nqH/UP6kkRh6PMZqs53beh02PZIA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-replace-webpack-plugin/-/html-replace-webpack-plugin-2.6.0.tgz", + "integrity": "sha512-BL0DgtqIAef2C8+Dq8v3Ork7FWLPVVkuFkd3DpFB8XxI8hgXiWytvWhGTztSwdiIrPstUPahL5g7W8ts/vuERw==", "dev": true }, "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", "dev": true }, "html-webpack-plugin": { @@ -7331,6 +9388,14 @@ "requires": { "deep-equal": "~1.0.1", "http-errors": "~1.7.2" + }, + "dependencies": { + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + } } }, "http-deceiver": { @@ -7352,19 +9417,13 @@ "toidentifier": "1.0.0" } }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true - }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } @@ -7379,6 +9438,111 @@ "is-glob": "^4.0.0", "lodash": "^4.17.11", "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "http-signature": { @@ -7398,10 +9562,10 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "hyphenate-style-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", - "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==", + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, "iconv-lite": { @@ -7437,9 +9601,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "iferr": { @@ -7448,26 +9612,20 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true }, "import-local": { @@ -7487,9 +9645,9 @@ "dev": true }, "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", "dev": true }, "indent-string": { @@ -7535,85 +9693,94 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "inline-style-prefixer": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz", - "integrity": "sha1-hVG45bTVcyROZqNLBPfTIHaitTQ=", + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "bowser": "^1.7.3", - "css-in-js-utils": "^2.0.0" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, - "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "has-symbols": "^1.0.1" } } } }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, "requires": { "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -7627,9 +9794,15 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, "is-accessor-descriptor": { @@ -7653,27 +9826,27 @@ } }, "is-alphabetical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", - "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", - "dev": true - }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumerical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", - "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7690,9 +9863,9 @@ } }, "is-boolean-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", "dev": true }, "is-buffer": { @@ -7708,12 +9881,21 @@ "dev": true }, "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", "dev": true, "requires": { - "ci-info": "^2.0.0" + "has": "^1.0.3" } }, "is-data-descriptor": { @@ -7743,9 +9925,9 @@ "dev": true }, "is-decimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", - "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-descriptor": { @@ -7773,6 +9955,13 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true, + "optional": true + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -7786,20 +9975,20 @@ "dev": true }, "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -7822,9 +10011,9 @@ } }, "is-hexadecimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", - "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-installed-globally": { @@ -7848,36 +10037,54 @@ } } }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "is-glob": "^2.0.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-extglob": "^1.0.0" } } } }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", "dev": true }, "is-obj": { @@ -7887,9 +10094,9 @@ "dev": true }, "is-path-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", - "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, "is-path-in-cwd": { @@ -7925,10 +10132,10 @@ "isobject": "^3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", "dev": true }, "is-redirect": { @@ -7947,9 +10154,9 @@ } }, "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true }, "is-retry-allowed": { @@ -7964,9 +10171,9 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", "dev": true }, "is-subset": { @@ -7975,12 +10182,6 @@ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", "dev": true }, - "is-supported-regexp-flag": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", - "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", - "dev": true - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -8002,11 +10203,14 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-whitespace-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", - "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", - "dev": true + "is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=", + "dev": true, + "requires": { + "is-invalid-path": "^0.1.0" + } }, "is-windows": { "version": "1.0.2", @@ -8014,12 +10218,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "is-word-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", - "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", - "dev": true - }, "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", @@ -8071,515 +10269,1841 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true }, "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "dependencies": { + "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 + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", + "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { - "handlebars": "^4.1.2" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", "dev": true, "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.8.0" + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" }, "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.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 + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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 + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", "dev": true, "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", "exit": "^0.1.2", - "import-local": "^2.0.0", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "yargs": "^15.4.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "execa": "^1.0.0", - "throat": "^4.0.0" + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", - "chalk": "^2.0.1", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" - } - }, - "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", - "dev": true, - "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", - "jsdom": "^11.5.1" + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" } }, "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true }, "jest-haste-map": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", - "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "anymatch": "^2.0.0", + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "micromatch": "^3.1.10", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "fsevents": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", + "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "dev": true, + "optional": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + } } }, "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^24.8.0", + "expect": "^26.6.2", "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", - "throat": "^4.0.0" + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", "dev": true, "requires": { - "pretty-format": "^24.8.0" + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" } }, "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^26.6.2", + "@types/node": "*" } }, "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", "dev": true }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", - "dev": true, - "requires": { - "@jest/types": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" - } - }, - "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^12.0.2" - } - }, - "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", - "dev": true - }, - "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", - "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "mkdirp": "^0.5.1", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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 + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.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 + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + } + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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 + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" + "micromatch": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "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 + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "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 + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.8.0", - "string-length": "^2.0.0" + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { - "merge-stream": "^1.0.1", - "supports-color": "^6.1.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } }, "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, "js-tokens": { @@ -8588,21 +12112,13 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } } }, "jsbn": { @@ -8612,62 +12128,61 @@ "dev": true }, "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", "xml-name-validator": "^3.0.0" }, "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true }, - "cssstyle": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", + "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": { - "cssom": "0.3.x" + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", + "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "dev": true } } }, @@ -8683,6 +12198,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -8719,6 +12240,15 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -8737,57 +12267,16 @@ "verror": "1.10.0" } }, - "jstransform": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", - "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", - "dev": true, - "requires": { - "base62": "^1.1.0", - "commoner": "^0.10.1", - "esprima-fb": "^15001.1.0-dev-harmony-fb", - "object-assign": "^2.0.0", - "source-map": "^0.4.2" - }, - "dependencies": { - "esprima-fb": { - "version": "15001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", - "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "jsx-ast-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", - "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", + "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", "dev": true, "requires": { - "array-includes": "^3.0.3" + "array-includes": "^3.1.1", + "object.assign": "^4.1.1" } }, - "keycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", - "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=", - "dev": true - }, "keygrip": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", @@ -8804,9 +12293,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "kleur": { @@ -8815,10 +12304,16 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, "known-css-properties": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz", - "integrity": "sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.20.0.tgz", + "integrity": "sha512-URvsjaA9ypfreqJ2/ylDr5MUERhJZ+DhguoWRr2xgS5C7aGCalXo+ewL+GixgKBfhT2vuL02nbIgNGqVWgTOYw==", "dev": true }, "koa": { @@ -8977,37 +12472,28 @@ "package-json": "^4.0.0" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -9021,13 +12507,13 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "dev": true, "requires": { "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -9078,16 +12564,22 @@ "dev": true }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", + "emojis-list": "^3.0.0", "json5": "^1.0.1" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -9115,9 +12607,9 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash-es": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.11.tgz", - "integrity": "sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" }, "lodash-webpack-plugin": { "version": "0.11.5", @@ -9146,10 +12638,10 @@ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, "lodash.sortby": { @@ -9158,18 +12650,6 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", - "dev": true - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -9180,9 +12660,9 @@ } }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", "dev": true }, "loglevelnext": { @@ -9196,9 +12676,9 @@ } }, "longest-streak": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", - "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true }, "loose-envify": { @@ -9239,14 +12719,6 @@ "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" - }, - "dependencies": { - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } } }, "make-dir": { @@ -9268,9 +12740,9 @@ } }, "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "makeerror": { @@ -9282,21 +12754,6 @@ "tmpl": "1.0.x" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -9318,41 +12775,10 @@ "object-visit": "^1.0.0" } }, - "markdown-escapes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", - "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", - "dev": true - }, - "markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true - }, - "material-ui": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/material-ui/-/material-ui-0.20.2.tgz", - "integrity": "sha512-VeqgQkdvtK193w+FFvXDEwlVxI4rWk83eWbpYLeOIHDPWr3rbB9B075JRnJt/8IsI2X8q5Aia5W3+7m4KkleDg==", - "dev": true, - "requires": { - "babel-runtime": "^6.23.0", - "inline-style-prefixer": "^3.0.8", - "keycode": "^2.1.8", - "lodash.merge": "^4.6.0", - "lodash.throttle": "^4.1.1", - "prop-types": "^15.5.7", - "react-event-listener": "^0.6.2", - "react-transition-group": "^1.2.1", - "recompose": "^0.26.0", - "simple-assign": "^0.1.0", - "warning": "^3.0.0" - } - }, "mathml-tag-names": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz", - "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, "md5.js": { @@ -9366,44 +12792,48 @@ "safe-buffer": "^5.1.2" } }, - "mdast-util-compact": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz", - "integrity": "sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==", + "mdast-util-from-markdown": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz", + "integrity": "sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^1.0.0", + "micromark": "~2.10.0", + "parse-entities": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz", + "integrity": "sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA==", "dev": true, "requires": { - "unist-util-visit": "^1.1.0" + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" } }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } - } - }, "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, "requires": { "errno": "^0.1.3", @@ -9432,96 +12862,6 @@ "read-pkg-up": "^1.0.1", "redent": "^1.0.0", "trim-newlines": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } } }, "merge-descriptors": { @@ -9540,18 +12880,15 @@ } }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { @@ -9560,25 +12897,24 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, + "micromark": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz", + "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, "miller-rabin": { @@ -9589,6 +12925,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "mime": { @@ -9598,37 +12942,72 @@ "dev": true }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.44.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "mini-css-extract-plugin": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz", - "integrity": "sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", "dev": true, "requires": { "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" }, "dependencies": { + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -9639,6 +13018,15 @@ "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } } } }, @@ -9664,9 +13052,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "minimist-options": { @@ -9679,36 +13067,6 @@ "is-plain-obj": "^1.1.0" } }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -9730,51 +13088,25 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.5" } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", "dev": true }, "moo": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", - "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", "dev": true }, "move-concurrently": { @@ -9792,9 +13124,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multicast-dns": { @@ -9813,12 +13145,6 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -9831,9 +13157,9 @@ } }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true }, "nanoassert": { @@ -9898,13 +13224,13 @@ "dev": true }, "nearley": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.16.0.tgz", - "integrity": "sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==", + "version": "2.19.7", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.7.tgz", + "integrity": "sha512-Y+KNwhBPcSJKeyQCFjn8B/MIe+DDlhaaDgjVldhy5xtFewIbiQgcbZV8k2gCVwkI1ZsKCnjIYZbR+0Fim5QYgg==", "dev": true, "requires": { "commander": "^2.19.0", - "moo": "^0.4.3", + "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6", "semver": "^5.4.1" @@ -9917,9 +13243,9 @@ "dev": true }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "next-tick": { @@ -9944,15 +13270,15 @@ } }, "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "dev": true }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true }, "node-gyp": { @@ -10035,31 +13361,66 @@ "dev": true }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", + "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", "dev": true, + "optional": true, "requires": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", "shellwords": "^0.1.1", - "which": "^1.3.0" + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "optional": true + }, + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "dev": true, + "optional": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "node-releases": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.21.tgz", - "integrity": "sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } + "version": "1.1.67", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", + "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "dev": true }, "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -10069,14 +13430,14 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "in-publish": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.15", "meow": "^3.7.0", "mkdirp": "^0.5.1", "nan": "^2.13.2", "node-gyp": "^3.8.0", "npmlog": "^4.0.0", "request": "^2.88.0", - "sass-graph": "^2.2.4", + "sass-graph": "2.2.5", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" }, @@ -10110,12 +13471,6 @@ "which": "^1.2.9" } }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -10146,13 +13501,10 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -10237,9 +13589,9 @@ "dev": true }, "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, "oauth-sign": { @@ -10291,16 +13643,74 @@ "dev": true }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", "dev": true }, "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } }, "object-keys": { "version": "1.1.1", @@ -10318,39 +13728,152 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + } } }, "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", + "es-abstract": "^1.17.5", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "object.fromentries": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", - "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", - "has": "^1.0.1" + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "object.getownpropertydescriptors": { @@ -10373,15 +13896,68 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "obuf": { @@ -10415,12 +13991,12 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "only": { @@ -10430,9 +14006,9 @@ "dev": true }, "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "opn": { @@ -10444,42 +14020,18 @@ "is-wsl": "^1.1.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, "original": { @@ -10503,17 +14055,6 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -10530,20 +14071,11 @@ "os-tmpdir": "^1.0.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true }, "p-finally": { "version": "1.0.0", @@ -10551,16 +14083,10 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -10581,11 +14107,14 @@ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } }, "p-try": { "version": "2.2.0", @@ -10606,18 +14135,18 @@ } }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } @@ -10638,26 +14167,33 @@ "dev": true, "requires": { "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } } }, "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" } }, "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "requires": { "character-entities": "^1.0.0", @@ -10685,10 +14221,13 @@ "dev": true }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } }, "parseurl": { "version": "1.3.3", @@ -10748,7 +14287,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, "requires": { "isarray": "0.0.1" }, @@ -10756,8 +14294,7 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" } } }, @@ -10771,9 +14308,9 @@ } }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -10790,9 +14327,9 @@ "dev": true }, "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, "pidtree": { @@ -10840,33 +14377,30 @@ "find-up": "^3.0.0" } }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, "popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } } } }, @@ -10877,9 +14411,9 @@ "dev": true }, "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -10907,15 +14441,6 @@ "htmlparser2": "^3.10.0" } }, - "postcss-jsx": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.0.tgz", - "integrity": "sha512-/lWOSXSX5jlITCKFkuYU2WLFdrncZmjSVyNpHAunEgirZXLwI8RjU556e3Uz4mv0WVHnJA9d3JWb36lK9Yx99g==", - "dev": true, - "requires": { - "@babel/core": ">=7.1.0" - } - }, "postcss-less": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", @@ -10923,38 +14448,6 @@ "dev": true, "requires": { "postcss": "^7.0.14" - }, - "dependencies": { - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-markdown": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz", - "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==", - "dev": true, - "requires": { - "remark": "^10.0.1", - "unist-util-find-all-after": "^1.0.2" } }, "postcss-media-query-parser": { @@ -10984,9 +14477,9 @@ } }, "postcss-modules-scope": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", - "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "dev": true, "requires": { "postcss": "^7.0.6", @@ -11003,40 +14496,6 @@ "postcss": "^7.0.6" } }, - "postcss-reporter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", - "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "postcss": "^7.0.7" - }, - "dependencies": { - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -11044,108 +14503,43 @@ "dev": true }, "postcss-safe-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", "dev": true, "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss": "^7.0.26" } }, "postcss-sass": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.3.5.tgz", - "integrity": "sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", "dev": true, "requires": { - "gonzales-pe": "^4.2.3", - "postcss": "^7.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" } }, "postcss-scss": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz", - "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", "dev": true, "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss": "^7.0.6" } }, "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", "dev": true, "requires": { "cssesc": "^3.0.0", "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" } }, "postcss-syntax": { @@ -11161,9 +14555,9 @@ "dev": true }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { @@ -11173,11 +14567,20 @@ "dev": true }, "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", @@ -11189,31 +14592,55 @@ } }, "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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 + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", "dev": true } } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -11221,9 +14648,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { @@ -11247,13 +14674,13 @@ "dev": true }, "prompts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", - "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", "dev": true, "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" } }, "prop-types": { @@ -11302,13 +14729,13 @@ "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "prr": { @@ -11324,9 +14751,9 @@ "dev": true }, "psl": { - "version": "1.1.32", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", - "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "public-encrypt": { @@ -11341,6 +14768,14 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "pump": { @@ -11382,16 +14817,10 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "query-string": { @@ -11418,9 +14847,9 @@ "dev": true }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, "quick-lru": { @@ -11489,6 +14918,14 @@ "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } } }, "rc": { @@ -11504,15 +14941,13 @@ } }, "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "dev": true, + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "prop-types": "^15.6.2" } }, "react-content-loader": { @@ -11521,46 +14956,30 @@ "integrity": "sha512-80t5SYxLCXDvpaRRH/p4tV8RGGPBM7YAWwA+mARCJWRj4IkcEnJxkPGboBENgkBmyG4xsMAsa/dgy93DXoQ1dA==" }, "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", - "dev": true, + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "scheduler": "^0.19.1" } }, "react-dropzone": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-10.1.5.tgz", - "integrity": "sha512-Hbe7soBc/i1fid7K3BU8T1oUJFnYO2AicS22F2MxcueMYDfKBWqZMr5ED3CoTAMs//9t2W30eyFiXm1h4wLCqA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-10.2.2.tgz", + "integrity": "sha512-U5EKckXVt6IrEyhMMsgmHQiWTGLudhajPPG77KFSvgsMqNEHSyGpqWvOMc5+DhEah/vH4E1n+J5weBNLd5VtyA==", "requires": { - "attr-accept": "^1.1.3", - "file-selector": "^0.1.11", + "attr-accept": "^2.0.0", + "file-selector": "^0.1.12", "prop-types": "^15.7.2" - } - }, - "react-event-listener": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz", - "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" }, "dependencies": { - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } + "attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==" } } }, @@ -11574,12 +14993,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, "react-popper": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.3.tgz", @@ -11605,25 +15018,49 @@ } }, "react-redux": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.1.tgz", - "integrity": "sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg==", - "dev": true, + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.2.tgz", + "integrity": "sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA==", "requires": { - "@babel/runtime": "^7.1.2", - "hoist-non-react-statics": "^3.1.0", - "invariant": "^2.2.4", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.1", - "react-is": "^16.6.0", - "react-lifecycles-compat": "^3.0.0" + "@babel/runtime": "^7.12.1", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "react-router": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", - "dev": true, "requires": { "history": "^4.7.2", "hoist-non-react-statics": "^2.5.0", @@ -11637,14 +15074,12 @@ "hoist-non-react-statics": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==", - "dev": true + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" }, "warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, "requires": { "loose-envify": "^1.0.0" } @@ -11655,7 +15090,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", - "dev": true, "requires": { "history": "^4.7.2", "invariant": "^2.2.4", @@ -11669,36 +15103,31 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, "requires": { "loose-envify": "^1.0.0" } } } }, - "react-test-renderer": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.6.tgz", - "integrity": "sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==", + "react-router-sitemap": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-router-sitemap/-/react-router-sitemap-1.2.0.tgz", + "integrity": "sha512-3aETwxCFTGHsGbXpyh7sr+c/WDr0q1rpng0M4pgoV6Owl3673buejPHGvzDmZEdiqhRa+I0znRDneKRc1NC06Q==", "dev": true, "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.13.6" + "sitemap": "^1.6.0" } }, - "react-transition-group": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz", - "integrity": "sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q==", + "react-test-renderer": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", + "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", "dev": true, "requires": { - "chain-function": "^1.0.0", - "dom-helpers": "^3.2.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.5.6", - "warning": "^3.0.0" + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.8.6", + "scheduler": "^0.19.1" } }, "read-pkg": { @@ -11713,19 +15142,99 @@ } }, "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -11757,60 +15266,110 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "dev": true, - "requires": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" }, "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "recompose": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", - "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", - "dev": true, - "requires": { - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "symbol-observable": "^1.0.4" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==", - "dev": true + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -11825,21 +15384,18 @@ } }, "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" } }, "redux-logger": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", - "dev": true, "requires": { "deep-diff": "^0.3.5" } @@ -11847,8 +15403,7 @@ "redux-promise-middleware": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/redux-promise-middleware/-/redux-promise-middleware-5.1.1.tgz", - "integrity": "sha512-YC1tiheU28Hgmtu5HHMLiuveLgjL1aCJWsSnwquMiZBcj5i/J9qVLt6vgOnb0Gz37y4deJ/rjiNt7l6Dh+Z8lA==", - "dev": true + "integrity": "sha512-YC1tiheU28Hgmtu5HHMLiuveLgjL1aCJWsSnwquMiZBcj5i/J9qVLt6vgOnb0Gz37y4deJ/rjiNt7l6Dh+Z8lA==" }, "reflect.ownkeys": { "version": "0.2.0", @@ -11857,33 +15412,27 @@ "dev": true }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -11896,30 +15445,87 @@ "safe-regex": "^1.1.0" } }, - "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==", - "dev": true + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "registry-auth-token": { @@ -11942,15 +15548,15 @@ } }, "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -11971,59 +15577,32 @@ "dev": true }, "remark": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", - "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "dev": true, "requires": { - "remark-parse": "^6.0.0", - "remark-stringify": "^6.0.0", - "unified": "^7.0.0" + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" } }, "remark-parse": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", - "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" + "mdast-util-from-markdown": "^0.8.0" } }, "remark-stringify": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", - "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz", + "integrity": "sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==", "dev": true, "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^1.1.0", - "mdast-util-compact": "^1.0.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^1.0.1", - "unherit": "^1.0.4", - "xtend": "^4.0.1" + "mdast-util-to-markdown": "^0.5.0" } }, "remove-array-items": { @@ -12079,9 +15658,9 @@ "dev": true }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "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", @@ -12091,7 +15670,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -12101,51 +15680,35 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } } }, "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", "dev": true, "requires": { - "request-promise-core": "1.1.2", + "request-promise-core": "1.1.4", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" } @@ -12190,14 +15753,6 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, "resolve-dir": { @@ -12237,9 +15792,9 @@ } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true }, "resolve-path": { @@ -12275,8 +15830,7 @@ "resolve-pathname": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==", - "dev": true + "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" }, "resolve-url": { "version": "0.2.1", @@ -12284,26 +15838,28 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -12330,19 +15886,16 @@ } }, "rsvp": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", - "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "dev": true }, "run-queue": { "version": "1.0.3", @@ -12353,21 +15906,6 @@ "aproba": "^1.1.1" } }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", - "dev": true - }, - "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -12403,6 +15941,111 @@ "micromatch": "^3.1.4", "minimist": "^1.1.1", "walker": "~1.0.5" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "sanitize-html": { @@ -12487,254 +16130,102 @@ } }, "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", "dev": true, "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" + "yargs": "^13.3.2" + } + }, + "sass-loader": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.0.tgz", + "integrity": "sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "dependencies": { - "camelcase": { + "emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "minimist": "^1.2.5" } }, - "strip-bom": { + "loader-utils": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true } } }, - "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "xmlchars": "^2.2.0" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "dev": true, + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "scss-tokenizer": { @@ -12765,12 +16256,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", "dev": true, "requires": { - "node-forge": "0.7.5" + "node-forge": "^0.10.0" } }, "semver": { @@ -12807,13 +16298,41 @@ "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "serve-index": { "version": "1.9.1", @@ -12830,6 +16349,15 @@ "parseurl": "~1.3.2" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -12842,6 +16370,12 @@ "statuses": ">= 1.4.0 < 2" } }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -12912,25 +16446,15 @@ "safe-buffer": "^5.0.1" } }, - "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", - "dev": true, - "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -12970,30 +16494,99 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "dev": true, + "optional": true }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "side-channel": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "dev": true, + "requires": { + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } }, - "simple-assign": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/simple-assign/-/simple-assign-0.1.0.tgz", - "integrity": "sha1-F/0wZqXz13OPUDIbsPFMooHMS6o=", + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "sisteransi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", - "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, + "sitemap": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-1.13.0.tgz", + "integrity": "sha1-Vpy+IYAgKSamKiZs094Jyc60P4M=", + "dev": true, + "requires": { + "underscore": "^1.7.0", + "url-join": "^1.1.0" + } + }, "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "slice-ansi": { @@ -13005,6 +16598,14 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } } }, "snapdragon": { @@ -13023,6 +16624,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -13041,6 +16651,12 @@ "is-extendable": "^0.1.0" } }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -13121,19 +16737,20 @@ } }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", "dev": true, "requires": { "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { "debug": "^3.2.5", @@ -13145,18 +16762,18 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -13195,12 +16812,12 @@ } }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -13208,9 +16825,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -13256,9 +16873,9 @@ "dev": true }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -13266,17 +16883,6 @@ "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "spdy-transport": { @@ -13293,19 +16899,10 @@ "wbuf": "^1.7.3" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -13358,27 +16955,23 @@ "tweetnacl": "~0.14.0" } }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } } }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "state-toggle": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", - "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", - "dev": true - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -13455,9 +17048,9 @@ } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "strict-uri-encode": { @@ -13467,55 +17060,106 @@ "dev": true }, "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", "dev": true, "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } } } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "has-symbols": "^1.0.1" } } } @@ -13532,14 +17176,195 @@ } }, "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.2.tgz", + "integrity": "sha512-b5yrbl3BXIjHau9Prk7U0RRYcUYdN4wGSVaqoBQS50CCE3KBuYU0TYRNPFCP7aVoNMX87HKThdMRVIP3giclKg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + } } }, "string_decoder": { @@ -13551,18 +17376,6 @@ "safe-buffer": "~5.1.0" } }, - "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", - "dev": true, - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -13584,6 +17397,12 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -13591,14 +17410,6 @@ "dev": true, "requires": { "get-stdin": "^4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - } } }, "strip-json-comments": { @@ -13608,13 +17419,52 @@ "dev": true }, "style-loader": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", - "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "style-search": { @@ -13624,373 +17474,617 @@ "dev": true }, "stylelint": { - "version": "9.10.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-9.10.1.tgz", - "integrity": "sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.8.0.tgz", + "integrity": "sha512-iHH3dv3UI23SLDrH4zMQDjLT9/dDIz/IpoFeuNxZmEx86KtfpjDOscxLTFioQyv+2vQjPlRZnK0UoJtfxLICXQ==", "dev": true, "requires": { - "autoprefixer": "^9.0.0", + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", "balanced-match": "^1.0.0", - "chalk": "^2.4.1", - "cosmiconfig": "^5.0.0", - "debug": "^4.0.0", - "execall": "^1.0.0", - "file-entry-cache": "^4.0.0", - "get-stdin": "^6.0.0", + "chalk": "^4.1.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "execall": "^2.0.0", + "fast-glob": "^3.2.4", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.0", + "get-stdin": "^8.0.0", "global-modules": "^2.0.0", - "globby": "^9.0.0", + "globby": "^11.0.1", "globjoin": "^0.1.4", - "html-tags": "^2.0.0", - "ignore": "^5.0.4", - "import-lazy": "^3.1.0", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", - "known-css-properties": "^0.11.0", - "leven": "^2.1.0", - "lodash": "^4.17.4", - "log-symbols": "^2.0.0", - "mathml-tag-names": "^2.0.1", - "meow": "^5.0.0", - "micromatch": "^3.1.10", + "known-css-properties": "^0.20.0", + "lodash": "^4.17.20", + "log-symbols": "^4.0.0", + "mathml-tag-names": "^2.1.3", + "meow": "^8.0.0", + "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", - "pify": "^4.0.0", - "postcss": "^7.0.13", + "postcss": "^7.0.35", "postcss-html": "^0.36.0", - "postcss-jsx": "^0.36.0", - "postcss-less": "^3.1.0", - "postcss-markdown": "^0.36.0", + "postcss-less": "^3.1.4", "postcss-media-query-parser": "^0.2.3", - "postcss-reporter": "^6.0.0", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.0", - "postcss-sass": "^0.3.5", - "postcss-scss": "^2.0.0", - "postcss-selector-parser": "^3.1.0", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.4", "postcss-syntax": "^0.36.2", - "postcss-value-parser": "^3.3.0", - "resolve-from": "^4.0.0", - "signal-exit": "^3.0.2", - "slash": "^2.0.0", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", "specificity": "^0.4.1", - "string-width": "^3.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", "style-search": "^0.1.0", "sugarss": "^2.0.0", "svg-tags": "^1.0.0", - "table": "^5.0.0" + "table": "^6.0.3", + "v8-compile-cache": "^2.2.0", + "write-file-atomic": "^3.0.3" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "autoprefixer": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", - "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "browserslist": "^4.5.4", - "caniuse-lite": "^1.0.30000957", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.14", - "postcss-value-parser": "^3.3.1" + "color-convert": "^2.0.1" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "ms": "^2.1.1" + "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 + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "file-entry-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-4.0.0.tgz", - "integrity": "sha512-AVSwsnbV8vH/UVbvgEhf3saVQXORNv0ZzSkvkhQIaia5Tia+JhGTaa/ePUSVoPHQyGayQNmYfkzFi3WZV5zcpA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, + "flatted": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", + "dev": true + }, "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "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 + }, + "hosted-git-info": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", + "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } }, - "ignore": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", - "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" } }, "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", "dev": true }, "meow": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", - "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.0.0.tgz", + "integrity": "sha512-nbsTRz2fwniJBFgUkcdISq8y/q9n9VbiHYbfwklFh5V4V2uAcxtKQkDc0yCLPM/kP0d+inZBewn3zJqewHE7kg==", "dev": true, "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0", - "yargs-parser": "^10.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { - "p-try": "^1.0.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.2.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "pify": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "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 + }, + "quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } } }, - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, - "read-pkg-up": { + "redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.3.tgz", + "integrity": "sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, "stylelint-config-recommended": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz", - "integrity": "sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", "dev": true }, "stylelint-config-recommended-scss": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-3.3.0.tgz", - "integrity": "sha512-BvuuLYwoet8JutOP7K1a8YaiENN+0HQn390eDi0SWe1h7Uhx6O3GUQ6Ubgie9b/AmHX4Btmp+ZzVGbzriFTBcA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.2.0.tgz", + "integrity": "sha512-4bI5BYbabo/GCQ6LbRZx/ZlVkK65a1jivNNsD+ix/Lw0U3iAch+jQcvliGnnAX8SUPaZ0UqzNVNNAF3urswa7g==", "dev": true, "requires": { - "stylelint-config-recommended": "^2.2.0" + "stylelint-config-recommended": "^3.0.0" } }, "stylelint-scss": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.6.1.tgz", - "integrity": "sha512-6bB2EHUZsE/bDVKUdzBXqOcfgXmg3zq9Lglgbu16EqMa4PM8Y48XKcB8coOj8CKr07GtlqtOdCNA2E5njoI9Kw==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.18.0.tgz", + "integrity": "sha512-LD7+hv/6/ApNGt7+nR/50ft7cezKP2HM5rI8avIdGaUWre3xlHfV4jKO/DRZhscfuN+Ewy9FMhcTq0CcS0C/SA==", "dev": true, "requires": { - "lodash": "^4.17.11", + "lodash": "^4.17.15", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^3.3.1" + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "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 - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } } } }, @@ -14001,28 +18095,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "supports-color": { @@ -14033,6 +18105,33 @@ "has-flag": "^3.0.0" } }, + "supports-hyperlinks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", + "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "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.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", @@ -14045,9 +18144,9 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, "synchronous-promise": { @@ -14061,13 +18160,13 @@ "integrity": "sha512-wjB6puVXTYO0BSFtCmWQubA/KIn7Xvajw0x0l6eJUudMG/EAiJvIUnyNX6xO4NpGrJ16lbD0eUseB9WxW0vlpQ==" }, "table": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", - "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", + "ajv": "^6.10.2", + "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, @@ -14078,6 +18177,12 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -14160,10 +18265,20 @@ } } }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, "terser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz", - "integrity": "sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -14172,16 +18287,16 @@ } }, "terser-webpack-plugin": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", - "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", + "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", @@ -14189,9 +18304,9 @@ }, "dependencies": { "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -14258,28 +18373,23 @@ "figgy-pudding": "^3.5.1" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, "text-table": { @@ -14307,15 +18417,9 @@ } }, "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, "through2": { @@ -14329,15 +18433,15 @@ } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "time-fix-plugin": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/time-fix-plugin/-/time-fix-plugin-2.0.6.tgz", - "integrity": "sha512-2cjjg3672ppNm/uKhHAoCFp1ItEAiH+xJOjO9WGIF8hXuxPAJ2adfYgFiyooVbsOb948c+WrRh+edxFUMxYHoQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/time-fix-plugin/-/time-fix-plugin-2.0.7.tgz", + "integrity": "sha512-uVFet1LQToeUX0rTcSiYVYVoGuBpc8gP/2jnlUzuHMHe+gux6XLsNzxLUweabMwiUj5ejhoIMsUI55nVSEa/Vw==", "dev": true }, "timed-out": { @@ -14347,9 +18451,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -14358,8 +18462,7 @@ "tiny-invariant": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz", - "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==", - "dev": true + "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==" }, "tiny-warning": { "version": "1.0.2", @@ -14374,15 +18477,6 @@ "popper.js": "^1.16.0" } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -14434,13 +18528,12 @@ } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "toidentifier": { @@ -14449,376 +18542,138 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, - "topojson": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/topojson/-/topojson-3.0.2.tgz", - "integrity": "sha512-u3zeuL6WEVL0dmsRn7uHZKc4Ao4gpW3sORUv+N3ezLTvY3JdCuyg0hvpWiIfFw8p/JwVN++SvAsFgcFEeR15rQ==", - "dev": true, - "requires": { - "topojson-client": "3.0.0", - "topojson-server": "3.0.0", - "topojson-simplify": "3.0.2" - }, - "dependencies": { - "topojson-client": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.0.0.tgz", - "integrity": "sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8=", - "dev": true, - "requires": { - "commander": "2" - } - }, - "topojson-server": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.0.tgz", - "integrity": "sha1-N4546Hw5cqe1vixdYENptrrmnF4=", - "dev": true, - "requires": { - "commander": "2" - } - }, - "topojson-simplify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/topojson-simplify/-/topojson-simplify-3.0.2.tgz", - "integrity": "sha512-gyYSVRt4jO/0RJXKZQPzTDQRWV+D/nOfiljNUv0HBXslFLtq3yxRHrl7jbrjdbda5Ytdr7M8BZUI4OxU7tnbRQ==", - "dev": true, - "requires": { - "commander": "2", - "topojson-client": "3" - } - } - } - }, "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "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" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", - "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", - "dev": true - }, - "trough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "ts-jest": { - "version": "24.0.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", - "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "make-error": "1.x", - "mkdirp": "0.x", - "resolve": "1.x", - "semver": "^5.5", - "yargs-parser": "10.x" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "ts-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.1.tgz", - "integrity": "sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^4.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true }, - "tsconfig-paths": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.8.0.tgz", - "integrity": "sha512-zZEYFo4sjORK8W58ENkRn9s+HmQFkkwydDG7My5s/fnfr2YYCaiyXe/HBUcIgU8epEKOXwiahOO+KZYjiXlWyQ==", + "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": { - "@types/json5": "^0.0.29", - "deepmerge": "^2.0.1", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, - "tsconfig-paths-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-S/gOOPOkV8rIL4LurZ1vUdYCVgo15iX9ZMJ6wx6w2OgcpT/G4wMyHB6WM+xheSqGMrWKuxFul+aXpCju3wmj/g==", + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", "dev": true, "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "tsconfig-paths": "^3.4.0" + "punycode": "^2.1.1" } }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true }, - "tslint": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz", - "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==", + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" + "glob": "^7.1.2" } }, - "tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, - "tslint-eslint-rules": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", - "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", + "ts-jest": { + "version": "26.4.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", + "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", "dev": true, "requires": { - "doctrine": "0.7.2", - "tslib": "1.9.0", - "tsutils": "^3.0.0" + "@types/jest": "26.x", + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" }, "dependencies": { - "doctrine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", - "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "esutils": "^1.1.6", - "isarray": "0.0.1" + "minimist": "^1.2.5" } }, - "esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true }, - "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true - }, - "tsutils": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.14.0.tgz", - "integrity": "sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } } } }, - "tslint-react": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-4.0.0.tgz", - "integrity": "sha512-9fNE0fm9zNDx1+b6hgy8rgDN2WsQLRiIrn3+fbqm0tazBVF6jiaCFAITxmU+WSFWYE03Xhp1joCircXOe1WVAQ==", + "ts-loader": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.5.tgz", + "integrity": "sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig==", "dev": true, "requires": { - "tsutils": "^3.9.1" + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" }, "dependencies": { - "tsutils": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.14.0.tgz", - "integrity": "sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, "tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -14847,14 +18702,26 @@ "dev": true }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -14871,15 +18738,24 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typesafe-actions": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/typesafe-actions/-/typesafe-actions-4.4.2.tgz", "integrity": "sha512-QW61P4cOX8dCNmrfpcUMjvU/MF/sFTC8/PlG9215W1gKDzZUBjRGdyYSO6ZcEUNsn491S2VpryJOHSIVSDqJrg==" }, "typescript": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.1.tgz", - "integrity": "sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw==" + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" }, "ua-parser-js": { "version": "0.7.19", @@ -14904,15 +18780,11 @@ } } }, - "unherit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", - "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" - } + "underscore": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.11.0.tgz", + "integrity": "sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw==", + "dev": true }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -14931,31 +18803,43 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "unified": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", - "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "@types/vfile": "^3.0.0", "bail": "^1.0.0", "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", "trough": "^1.0.0", - "vfile": "^3.0.0", - "x-is-string": "^0.1.0" + "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } } }, "union-value": { @@ -14986,9 +18870,9 @@ } }, "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -15004,52 +18888,34 @@ } }, "unist-util-find-all-after": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.3.tgz", - "integrity": "sha512-FNPM5Q1AViItYvkLngkalxZ879j842VxGzlfI0gLlgDQz/Teh9CUzqpc7kgFOWO3RK5qU/wqG0UnJ6XWiHSWiA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", "dev": true, "requires": { - "unist-util-is": "^2.0.0" + "unist-util-is": "^4.0.0" } }, "unist-util-is": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.3.tgz", - "integrity": "sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz", + "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==", "dev": true }, - "unist-util-remove-position": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz", - "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==", - "dev": true, - "requires": { - "unist-util-visit": "^1.1.0" - } - }, "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true - }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^2.0.2" } }, - "unist-util-visit-parents": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.1.tgz", - "integrity": "sha512-/vuqJFrPaWX2QpW3WqOfnvRmqqlPux5BlWMRcUYm8QO5odQJ9XTGoonFYT9hzJXrpT+AmNMKQjK/9xMB5DaLhw==", - "dev": true, - "requires": { - "unist-util-is": "^2.1.2" - } + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true }, "unpipe": { "version": "1.0.0", @@ -15104,9 +18970,9 @@ "dev": true }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "update-notifier": { @@ -15125,29 +18991,6 @@ "latest-version": "^3.0.0", "semver-diff": "^2.0.0", "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - } } }, "upper-case": { @@ -15157,9 +19000,9 @@ "dev": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -15190,9 +19033,9 @@ } }, "url-join": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-3.0.0.tgz", - "integrity": "sha1-JugROs4ZXqMND8OBhuRUAPnOpnI=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", + "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", "dev": true }, "url-parse": { @@ -15266,17 +19109,36 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, + "v8-to-istanbul": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", + "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -15290,8 +19152,7 @@ "value-equal": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==", - "dev": true + "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" }, "vary": { "version": "1.1.2", @@ -15311,38 +19172,34 @@ } }, "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", "dev": true, "requires": { + "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" }, "dependencies": { "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true } } }, - "vfile-location": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz", - "integrity": "sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==", - "dev": true - }, "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "requires": { - "unist-util-stringify-position": "^1.1.1" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, "victory": { @@ -15722,12 +19579,21 @@ "dev": true }, "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "requires": { - "browser-process-hrtime": "^0.1.2" + "xml-name-validator": "^3.0.0" } }, "walker": { @@ -15739,24 +19605,100 @@ "makeerror": "1.0.x" } }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + } } }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, + "optional": true, "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "chokidar": "^2.1.8" } }, "wbuf": { @@ -15769,66 +19711,77 @@ } }, "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, "webpack": { - "version": "4.41.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", - "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.1", - "watchpack": "^1.6.0", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -15839,6 +19792,80 @@ "estraverse": "^4.1.1" } }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -15850,26 +19877,26 @@ "ajv-keywords": "^3.1.0" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, "webpack-bundle-analyzer": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", - "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-walk": "^6.1.1", + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", "bfj": "^6.1.1", "chalk": "^2.4.1", "commander": "^2.18.0", @@ -15877,124 +19904,122 @@ "express": "^4.16.3", "filesize": "^3.6.1", "gzip-size": "^5.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.19", "mkdirp": "^0.5.1", "opener": "^1.5.1", "ws": "^6.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } } }, "webpack-cli": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.2.tgz", - "integrity": "sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.5" + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" }, "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "has-flag": "^3.0.0" } } } }, "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, "requires": { "memory-fs": "^0.4.1", - "mime": "^2.4.2", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", "range-parser": "^1.2.1", "webpack-log": "^2.0.0" }, "dependencies": { + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, "mime": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", - "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true } } }, "webpack-dev-server": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz", - "integrity": "sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.1.6", + "chokidar": "^2.1.8", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", "del": "^4.1.1", - "express": "^4.17.0", - "html-entities": "^1.2.1", - "http-proxy-middleware": "^0.19.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", "killable": "^1.0.1", - "loglevel": "^1.6.1", + "loglevel": "^1.6.8", "opn": "^5.5.0", - "portfinder": "^1.0.20", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.4", - "semver": "^6.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.0", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", - "yargs": "12.0.5" + "ws": "^6.2.1", + "yargs": "^13.3.2" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -16007,9 +20032,9 @@ } }, "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "supports-color": { @@ -16024,9 +20049,9 @@ } }, "webpack-hot-client": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-4.1.2.tgz", - "integrity": "sha512-J0qt5mxEOt9UAQkyQ59Mz0n9Sk4NWKJ4awVE5/idmG2vOHVjseczbY9hbdzHV3NyNllufhN2USvSJK5FUBFbeg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-4.1.3.tgz", + "integrity": "sha512-0rgy2BXqm9uNu9Q2bhaqaoaKLW1DJ4g84+PzkaU8MD+m3bGZJLF8CbCOqLO5Y6KFY+SYR9ZKW8bK5nvW22KqOw==", "dev": true, "requires": { "@webpack-contrib/schema-utils": "^1.0.0-beta.0", @@ -16086,14 +20111,6 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - } } }, "webpack-serve": { @@ -16152,9 +20169,9 @@ } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -16292,6 +20309,12 @@ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", "dev": true }, + "url-join": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-3.0.0.tgz", + "integrity": "sha1-JugROs4ZXqMND8OBhuRUAPnOpnI=", + "dev": true + }, "webpack-hot-client": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-3.0.0.tgz", @@ -16340,90 +20363,28 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" } }, - "webpack-visualizer-plugin": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/webpack-visualizer-plugin/-/webpack-visualizer-plugin-0.1.11.tgz", - "integrity": "sha1-uHcK2GtPZSYSxosbeCJT+vn4o04=", - "dev": true, - "requires": { - "d3": "^3.5.6", - "mkdirp": "^0.5.1", - "react": "^0.14.0", - "react-dom": "^0.14.0" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "d3": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", - "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=", - "dev": true - }, - "fbjs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz", - "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=", - "dev": true, - "requires": { - "core-js": "^1.0.0", - "loose-envify": "^1.0.0", - "promise": "^7.0.3", - "ua-parser-js": "^0.7.9", - "whatwg-fetch": "^0.9.0" - } - }, - "react": { - "version": "0.14.9", - "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz", - "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=", - "dev": true, - "requires": { - "envify": "^3.0.0", - "fbjs": "^0.6.1" - } - }, - "react-dom": { - "version": "0.14.9", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.9.tgz", - "integrity": "sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM=", - "dev": true - }, - "whatwg-fetch": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz", - "integrity": "sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA=", - "dev": true - } - } - }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-encoding": { @@ -16447,14 +20408,14 @@ "dev": true }, "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" } }, "which": { @@ -16488,12 +20449,45 @@ "dev": true, "requires": { "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "worker-farm": { @@ -16506,33 +20500,46 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -16553,9 +20560,9 @@ } }, "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -16564,24 +20571,24 @@ } }, "write-file-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-k46VeERtaezbmjpDcMWATjKUWBrVe/ZEEm0cyvUm8FFP8A/r+dw5x3psRvkUOhqh9bqBLUlGYYbtr6luI+HeAg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-4.5.1.tgz", + "integrity": "sha512-AZ7qJUvhTCBiOtG21aFJUcNuLVo2FFM6JMGKvaUGAH+QDqQAp2iG0nq3GcuXmJOFQR2JjpjhyYkyPrbFKhdjNQ==", "dev": true, "requires": { "chalk": "^2.4.0", "debug": "^3.1.0", "filesize": "^3.6.1", - "lodash": "^4.17.5", + "lodash": "^4.17.13", "mkdirp": "^0.5.1", "moment": "^2.22.1", "write-file-atomic": "^2.3.0" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -16598,12 +20605,6 @@ "async-limiter": "~1.0.0" } }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", @@ -16616,6 +20617,12 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -16628,43 +20635,73 @@ "dev": true }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" }, "dependencies": { - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -16696,6 +20733,12 @@ "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" } } + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true } } } diff --git a/package.json b/package.json index 2d490ca8..212abf36 100644 --- a/package.json +++ b/package.json @@ -3,127 +3,104 @@ "version": "1.1.0", "private": false, "dependencies": { - "@babel/runtime": "^7.1.2", "@patternfly/patternfly": "^4.10.31", "@patternfly/react-charts": "^6.5.1", "@patternfly/react-core": "^4.22.2", "@patternfly/react-table": "^4.8.3", "@redhat-cloud-services/frontend-components": "^2.1.2", - "@redhat-cloud-services/frontend-components-notifications": "^2.1.1", + "@redhat-cloud-services/frontend-components-notifications": "^2.2.3", "@redhat-cloud-services/frontend-components-utilities": "^2.1.0", - "@types/jest": "^24.0.13", - "@types/lodash": "^4.14.130", - "@types/node": "^12.0.2", - "@types/react": "^16.8.18", - "@types/react-dom": "^16.8.4", - "@types/react-redux": "^7.0.9", - "@types/react-router-dom": "^4.3.3", - "@types/redux-logger": "^3.0.7", "axios": "^0.19.0", - "classnames": "^2.2.5", + "classnames": "^2.2.6", "create-react-class": "^15.6.3", - "formik": "^1.5.7", - "react-dropzone": "^10.1.4", + "formik": "^1.5.8", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-dropzone": "^10.2.2", + "react-redux": "^7.2.0", + "react-router-dom": "^4.2.2", + "redux": "^4.0.5", + "redux-logger": "^3.0.6", + "redux-promise-middleware": "^5.1.1", "typesafe-actions": "^4.4.2", - "typescript": "^3.4.5", + "typescript": "^3.9.7", "yup": "^0.27.0" }, - "sassIncludes": { - "patternfly": "node_modules/patternfly/dist/sass", - "bootstrap": "node_modules/patternfly/node_modules/bootstrap-sass/assets/stylesheets", - "fontAwesome": "node_modules/patternfly/node_modules/font-awesome-sass/assets/stylesheets" - }, "devDependencies": { - "@babel/core": "^7.3.4", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.1.0", - "@babel/preset-env": "^7.3.4", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-react": "^7.0.0", - "@babel/preset-typescript": "^7.3.3", - "@redhat-cloud-services/frontend-components-config": "^2.1.0", - "@types/enzyme": "^3.9.3", + "@babel/core": "^7.10.0", + "@babel/plugin-proposal-class-properties": "^7.10.0", + "@babel/plugin-proposal-object-rest-spread": "^7.10.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.10.0", + "@babel/preset-env": "^7.10.0", + "@babel/preset-flow": "^7.9.0", + "@babel/preset-react": "^7.10.0", + "@babel/preset-typescript": "^7.12.1", + "@babel/runtime": "^7.10.0", + "@redhat-cloud-services/frontend-components-config": "^2.1.8", + "@types/enzyme": "^3.10.8", + "@types/jest": "^26.0.15", + "@types/lodash": "^4.14.165", + "@types/node": "^12.19.5", + "@types/react": "^16.9.56", + "@types/react-dom": "^16.9.9", + "@types/react-redux": "^7.1.11", + "@types/react-router-dom": "^4.3.5", + "@types/redux-logger": "^3.0.8", + "@typescript-eslint/eslint-plugin": "^4.8.1", + "@typescript-eslint/parser": "^4.8.1", "babel-core": "^7.0.0-bridge.0", - "babel-eslint": "^10.0.1", - "babel-jest": "^24.1.0", - "babel-loader": "^8.0.4", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.0.1", "babel-plugin-dual-import": "^1.2.1", - "babel-plugin-lodash": "^3.3.2", - "clean-webpack-plugin": "^0.1.19", - "copy-webpack-plugin": "^4.5.1", - "cross-fetch": "^2.2.2", - "css-loader": "^2.1.1", - "d3": "^5.7.0", - "enzyme": "^3.10.0", - "enzyme-adapter-react-16": "^1.5.0", - "enzyme-to-json": "^3.3.4", - "eslint": "^5.15.1", - "eslint-config-prettier": "^2.10.0", - "eslint-loader": "^2.1.0", - "eslint-plugin-react": "^7.11.1", - "file-loader": "^1.1.11", - "git-revision-webpack-plugin": "^3.0.3", - "glob": "^7.1.3", - "html-replace-webpack-plugin": "^2.5.3", - "html-webpack-plugin": "^3.0.4", + "babel-plugin-lodash": "^3.3.4", + "babel-plugin-transform-imports": "^2.0.0", + "clean-webpack-plugin": "^2.0.1", + "cross-fetch": "^3.0.4", + "css-loader": "^3.5.3", + "enzyme": "^3.11.0", + "enzyme-adapter-react-16": "^1.15.2", + "enzyme-to-json": "^3.5.0", + "eslint": "^7.1.0", + "eslint-config-prettier": "^6.11.0", + "eslint-loader": "^4.0.2", + "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-react": "^7.20.0", + "eslint-plugin-react-hooks": "^4.0.4", + "eslint-plugin-testing-library": "^3.10.1", + "file-loader": "^2.0.0", + "html-webpack-plugin": "^3.2.0", "identity-obj-proxy": "^3.0.0", - "jest": "^24.1.0", - "lodash-webpack-plugin": "^0.11.5", - "material-ui": "^0.20.2", - "mini-css-extract-plugin": "^0.4.2", - "moment": "^2.22.1", - "node-sass": "^4.11.0", - "npm-run-all": "^4.1.3", - "prettier": "^1.18.2", - "prop-types": "^15.6.2", - "react": "^16.8.6", - "react-dom": "^16.4.2", - "react-redux": "^5.0.7", - "react-router-dom": "^4.2.2", - "redux": "^3.7.2", - "redux-logger": "^3.0.6", - "redux-promise-middleware": "^5.1.1", - "regenerator-runtime": "^0.12.1", - "sass-loader": "^7.1.0", - "source-map-loader": "^0.2.4", - "style-loader": "^0.21.0", - "stylelint": "^9.10.1", - "stylelint-config-recommended-scss": "^3.2.0", - "stylelint-scss": "^3.3.0", - "topojson": "^3.0.2", - "ts-jest": "^24.0.2", - "ts-loader": "^6.2.1", - "tsconfig-paths-webpack-plugin": "^3.2.0", - "tslint": "^5.18.0", - "tslint-config-prettier": "^1.18.0", - "tslint-eslint-rules": "^5.4.0", - "tslint-react": "^4.0.0", - "webpack": "^4.41.2", - "webpack-bundle-analyzer": "^3.3.2", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14", - "webpack-visualizer-plugin": "^0.1.11", - "write-file-webpack-plugin": "^4.4.0" + "jest": "^26.0.1", + "mini-css-extract-plugin": "^0.9.0", + "node-sass": "^4.14.1", + "npm-run-all": "^4.1.5", + "prettier": "^2.0.4", + "prop-types": "^15.7.2", + "sass-loader": "^10.1.0", + "style-loader": "^2.0.0", + "stylelint": "^13.5.0", + "stylelint-config-recommended-scss": "^4.2.0", + "stylelint-scss": "^3.17.2", + "ts-jest": "^26.1.1", + "ts-loader": "^7.0.5", + "webpack": "^4.43.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-cli": "^3.3.11" }, "scripts": { "build": "webpack --config config/prod.webpack.config.js", - "test": "TZ=UTC jest --verbose", - "update:snapshots": "TZ=UTC jest -u", - "lint": "npm-run-all lint:*", - "lint:js": "eslint config src", - "lint:js:fix": "eslint config src --fix", - "lint:sass": "stylelint 'src/**/*.scss' --config .stylelintrc.json", - "lint:ts": "tslint -c ./tslint.json --project .", - "lint:ts:fix": "tslint -c ./tslint.json --fix --project .", + "build:prod": "NODE_ENV=production webpack --config config/prod.webpack.config.js", + "deploy": "npm-run-all build:prod lint test", + "lint": "eslint config src --ext .js,.jsx,.ts,.tsx && prettier ./src/**/*.scss --check", + "lint:fix": "eslint config src --ext .js,.jsx,.ts,.tsx --fix && prettier ./src/**/*.scss --write", "prod": "NODE_ENV=production webpack-dev-server --config config/dev.webpack.config.js", "server:ctr": "node src/server/generateServerKey.js", "start": "NODE_ENV=development webpack-dev-server --config config/dev.webpack.config.js", - "build:prod": "NODE_ENV=production webpack --config config/prod.webpack.config.js", - "deploy": "npm-run-all build:prod lint test", + "test": "TZ=UTC jest --verbose", "verify": "npm-run-all build lint test", - "format": "prettier --check --write ./src/**/*.{tsx,ts,js}" + "update:snapshots": "TZ=UTC jest -u", + "prettier:fix": "prettier config src --write" }, "insights": { "appname": "migration-analytics" diff --git a/src/App.js b/src/App.js index d402864f..e90a80c5 100644 --- a/src/App.js +++ b/src/App.js @@ -6,7 +6,7 @@ import { Routes } from './Routes'; import './App.scss'; import '@patternfly/patternfly/patternfly-addons.css'; import '@redhat-cloud-services/frontend-components-notifications/index.css'; -import { NotificationsPortal } from '@redhat-cloud-services/frontend-components-notifications'; +import { NotificationPortal } from '@redhat-cloud-services/frontend-components-notifications'; import asyncComponent from './Utilities/asyncComponent'; const DeleteMessageDialog = asyncComponent(() => @@ -14,31 +14,32 @@ const DeleteMessageDialog = asyncComponent(() => ); class App extends Component { - - componentDidMount () { - insights.chrome.init(); - insights.chrome.identifyApp('migration-analytics'); - - this.appNav = insights.chrome.on('APP_NAVIGATION', event => this.props.history.push(`/${event.navId}`)); - } - - componentWillUnmount () { - this.appNav(); - } - - render () { - return ( - - - - - - ); - } + componentDidMount() { + insights.chrome.init(); + insights.chrome.identifyApp('migration-analytics'); + + this.appNav = insights.chrome.on('APP_NAVIGATION', (event) => + this.props.history.push(`/${event.navId}`) + ); + } + + componentWillUnmount() { + this.appNav(); + } + + render() { + return ( + + + + + + ); + } } App.propTypes = { - history: PropTypes.object + history: PropTypes.object, }; /** @@ -46,4 +47,4 @@ App.propTypes = { * connect: https://github.com/reactjs/react-redux/blob/master/docs/api.md * https://reactjs.org/docs/higher-order-components.html */ -export default withRouter (connect()(App)); +export default withRouter(connect()(App)); diff --git a/src/App.scss b/src/App.scss index 88f0d5a7..031072f8 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,37 +1,37 @@ // Importing Global Variables -@import "~@redhat-cloud-services/frontend-components-utilities/files/Utilities/_all"; -@import "~@redhat-cloud-services/frontend-components/index.css"; +@import '~@redhat-cloud-services/frontend-components-utilities/files/Utilities/_all'; +@import '~@redhat-cloud-services/frontend-components/index.css'; .pf-c-page__main { - background-color: #e7e7e7; + background-color: #e7e7e7; } // Customize Patternfly :root { - // .xa-c-card-solid - --xa-card-solid-border--Color: var(--pf-global--BorderColor--dark-100); - --xa-card-solid-border--Width: 1px; - --xa-card-solid-border--Style: solid; + // .xa-c-card-solid + --xa-card-solid-border--Color: var(--pf-global--BorderColor--dark-100); + --xa-card-solid-border--Width: 1px; + --xa-card-solid-border--Style: solid; } .pf-c-card { - &.xa-c-card-solid { - --xa-c-card--BorderColor: var(--xa-card-solid-border--Color); - --xa-c-card--BorderWidth: var(--xa-card-solid-border--Width); - --xa-c-card--BorderStyle: var(--xa-card-solid-border--Style); + &.xa-c-card-solid { + --xa-c-card--BorderColor: var(--xa-card-solid-border--Color); + --xa-c-card--BorderWidth: var(--xa-card-solid-border--Width); + --xa-c-card--BorderStyle: var(--xa-card-solid-border--Style); - box-shadow: none !important; - border-width: var(--xa-c-card--BorderWidth) !important; - border-style: var(--xa-c-card--BorderStyle) !important; - border-color: var(--xa-c-card--BorderColor) !important; - } + box-shadow: none !important; + border-width: var(--xa-c-card--BorderWidth) !important; + border-style: var(--xa-c-card--BorderStyle) !important; + border-color: var(--xa-c-card--BorderColor) !important; + } } // Patternfly 4 Upgrade // Workaround to have the Delete Modal with overflow header .ma-delete-modal .pf-c-modal-box__header { - overflow: hidden; - text-overflow: ellipsis; -} \ No newline at end of file + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/src/PresentationalComponents/EmptyCard/EmptyCard.test.tsx b/src/PresentationalComponents/EmptyCard/EmptyCard.test.tsx index 8fa95942..2054744e 100644 --- a/src/PresentationalComponents/EmptyCard/EmptyCard.test.tsx +++ b/src/PresentationalComponents/EmptyCard/EmptyCard.test.tsx @@ -3,22 +3,22 @@ import { shallow } from 'enzyme'; import { EmptyCard } from './EmptyCard'; describe('EmptyCard', () => { - it('expect to render without description', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render without description', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render with description', () => { - const wrapper = shallow( - - ); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render with description', () => { + const wrapper = shallow( + + ); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render with cardTitle as Element', () => { - const wrapper = shallow( - My Title} message="My message" description="My description" /> - ); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render with cardTitle as Element', () => { + const wrapper = shallow( + My Title} message="My message" description="My description" /> + ); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/PresentationalComponents/EmptyCard/EmptyCard.tsx b/src/PresentationalComponents/EmptyCard/EmptyCard.tsx index 333174b2..85c6e108 100644 --- a/src/PresentationalComponents/EmptyCard/EmptyCard.tsx +++ b/src/PresentationalComponents/EmptyCard/EmptyCard.tsx @@ -1,13 +1,13 @@ import React from 'react'; import { - Card, - CardBody, - Bullseye, - EmptyState, - EmptyStateVariant, - EmptyStateIcon, - Title, - EmptyStateBody + Card, + CardBody, + Bullseye, + EmptyState, + EmptyStateVariant, + EmptyStateIcon, + Title, + EmptyStateBody, } from '@patternfly/react-core'; import { SearchIcon } from '@patternfly/react-icons'; import { css } from '@patternfly/react-styles'; @@ -15,27 +15,29 @@ import styles from '@patternfly/react-styles/css/components/Card/card'; import titleStyles from '@patternfly/react-styles/css/components/Title/title'; interface Props { - cardTitle: string | React.ReactElement; - message: string; - description?: string; - minHeight?: number; + cardTitle: string | React.ReactElement; + message: string; + description?: string; + minHeight?: number; } export const EmptyCard: React.FC = ({ cardTitle, message, description, minHeight }) => { - return ( - -
{cardTitle}
- - - - - - {message} - - {description && {description}} - - - -
- ); + return ( + +
+ {cardTitle} +
+ + + + + + {message} + + {description && {description}} + + + +
+ ); }; diff --git a/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.test.tsx b/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.test.tsx index 8a7b5e81..f9096a50 100644 --- a/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.test.tsx +++ b/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.test.tsx @@ -1,35 +1,31 @@ -import React from "react"; -import { shallow } from "enzyme"; -import FancyChartDonut, { FancyChartDonutData } from "./FancyChartDonut"; +import React from 'react'; +import { shallow } from 'enzyme'; +import FancyChartDonut, { FancyChartDonutData } from './FancyChartDonut'; const chartData: FancyChartDonutData[] = [ - { label: 'year1', value: 10, color: 'red', extraData: {} }, - { label: 'year2', value: 20, color: 'blue', extraData: {} }, - { label: 'year3', value: 30, color: 'yellow', extraData: {} }, - { label: 'year4', value: 40, color: 'green', extraData: {} } + { label: 'year1', value: 10, color: 'red', extraData: {} }, + { label: 'year2', value: 20, color: 'blue', extraData: {} }, + { label: 'year3', value: 30, color: 'yellow', extraData: {} }, + { label: 'year4', value: 40, color: 'green', extraData: {} }, ]; -describe("FancyChartDonut", () => { - - it("expect to render with minimun props", () => { - const data = [ - ...chartData - ]; - const wrapper = shallow(); +describe('FancyChartDonut', () => { + it('expect to render with minimun props', () => { + const data = [...chartData]; + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); -// it("expect to render footer", () => { -// const data = { -// ...baseData -// }; - -// const footer = ( -//

this is a footer

-// ); + // it("expect to render footer", () => { + // const data = { + // ...baseData + // }; -// const wrapper = shallow(); -// expect(wrapper).toMatchSnapshot(); -// }); - + // const footer = ( + //

this is a footer

+ // ); + + // const wrapper = shallow(); + // expect(wrapper).toMatchSnapshot(); + // }); }); diff --git a/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.tsx b/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.tsx index 6d1aa11d..4a098c1e 100644 --- a/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.tsx +++ b/src/PresentationalComponents/FancyChartDonut/FancyChartDonut.tsx @@ -1,88 +1,86 @@ import React, { Component } from 'react'; import { - ChartDonut, - ChartDonutProps, - ChartThemeColor, - ChartThemeVariant + ChartDonut, + ChartDonutProps, + ChartThemeColor, + ChartThemeVariant, } from '@patternfly/react-charts'; export interface FancyChartDonutData { - label: string; - value: number; - color?: string; - extraData?: any; + label: string; + value: number; + color?: string; + extraData?: any; } interface Props { - data: FancyChartDonutData[]; - chartProps?: ChartDonutProps; - tickFormat?: (label: string, value: number, data: any) => string; - tooltipFormat?: (datum: any) => string; + data: FancyChartDonutData[]; + chartProps?: ChartDonutProps; + tickFormat?: (label: string, value: number, data: any) => string; + tooltipFormat?: (datum: any) => string; } -interface State { -} - -class FancyChartDonut extends Component { - - constructor(props: Props) { - super(props); - } +class FancyChartDonut extends Component { + constructor(props: Props) { + super(props); + } - public render() { - const { data, chartProps, tickFormat, tooltipFormat } = this.props; + public render() { + const { data, chartProps, tickFormat, tooltipFormat } = this.props; - const chartData = data.map((val) => { - return { - x: val.label, - y: val.value, - extraData: val.extraData - }; - }); + const chartData = data.map((val) => { + return { + x: val.label, + y: val.value, + extraData: val.extraData, + }; + }); - const legendData = data.map((val) => { - return { - name: tickFormat ? tickFormat (val.label, val.value, val.extraData) : `${val.label}: ${val.value}` - }; - }); + const legendData = data.map((val) => { + return { + name: tickFormat + ? tickFormat(val.label, val.value, val.extraData) + : `${val.label}: ${val.value}`, + }; + }); - const chartLabels = (d: any): string => { - if (tooltipFormat) { - return tooltipFormat(d); - } else if (tickFormat) { - tickFormat(d.datum.x, d.datum.y, d.datum.extraData) - } - return `${d.datum.x}: ${d.datum.y}`; - }; + const chartLabels = (d: any): string => { + if (tooltipFormat) { + return tooltipFormat(d); + } else if (tickFormat) { + tickFormat(d.datum.x, d.datum.y, d.datum.extraData); + } + return `${d.datum.x}: ${d.datum.y}`; + }; - return ( - -
-
- -
-
-
- ); - } + return ( + +
+
+ +
+
+
+ ); + } } export default FancyChartDonut; diff --git a/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.scss b/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.scss index e813bad9..babe030a 100644 --- a/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.scss +++ b/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.scss @@ -1,11 +1,11 @@ .chart-footer { - font-size: 14px; - letter-spacing: normal; - padding: 10px; - stroke: transparent; - fill: rgb(21, 21, 21); + font-size: 14px; + letter-spacing: normal; + padding: 10px; + stroke: transparent; + fill: rgb(21, 21, 21); } .fancy-groupped-bar-chart-container { - width: 100%; -} \ No newline at end of file + width: 100%; +} diff --git a/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.test.tsx b/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.test.tsx index 098dde4b..9d18360f 100644 --- a/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.test.tsx +++ b/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.test.tsx @@ -1,45 +1,41 @@ -import React from "react"; -import { shallow } from "enzyme"; -import FancyGroupedBarChart, { FancyGroupedBarChartData } from "./FancyGroupedBarChart"; +import React from 'react'; +import { shallow } from 'enzyme'; +import FancyGroupedBarChart, { FancyGroupedBarChartData } from './FancyGroupedBarChart'; const baseData: FancyGroupedBarChartData = { - legends: [ 'Legend1', 'Legend2' ], - colors: [ 'red', 'blue' ], - values: [ - [ - { x: 'Year1', y: 10, label: '10 oranges' }, - { x: 'Year2', y: 20, label: '20 oranges' }, - { x: 'Year3', y: 30, label: '30 oranges' } - ], - [ - { x: 'Year1', y: 40, label: '40 bananas' }, - { x: 'Year2', y: 50, label: '50 bananas' }, - { x: 'Year3', y: 60, label: '60 bananas' } - ] - ] + legends: ['Legend1', 'Legend2'], + colors: ['red', 'blue'], + values: [ + [ + { x: 'Year1', y: 10, label: '10 oranges' }, + { x: 'Year2', y: 20, label: '20 oranges' }, + { x: 'Year3', y: 30, label: '30 oranges' }, + ], + [ + { x: 'Year1', y: 40, label: '40 bananas' }, + { x: 'Year2', y: 50, label: '50 bananas' }, + { x: 'Year3', y: 60, label: '60 bananas' }, + ], + ], }; -describe("FancyGroupedBarChart", () => { - - it("expect to render with minimun props", () => { +describe('FancyGroupedBarChart', () => { + it('expect to render with minimun props', () => { const data = { - ...baseData + ...baseData, }; - const wrapper = shallow(); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to render footer", () => { + it('expect to render footer', () => { const data = { - ...baseData + ...baseData, }; - - const footer = ( -

this is a footer

- ); - const wrapper = shallow(); + const footer =

this is a footer

; + + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.tsx b/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.tsx index eb6892d8..efe95b11 100644 --- a/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.tsx +++ b/src/PresentationalComponents/FancyGroupedBarChart/FancyGroupedBarChart.tsx @@ -1,137 +1,134 @@ import React, { Component } from 'react'; import { - ChartLegend, - Chart, - ChartGroup, - ChartBar, - ChartLegendProps, - ChartProps, - ChartGroupProps, - ChartBarProps, - ChartAxis, - ChartTooltip, - ChartAxisProps, - ChartThemeColor, - ChartThemeVariant + ChartLegend, + Chart, + ChartGroup, + ChartBar, + ChartLegendProps, + ChartProps, + ChartGroupProps, + ChartBarProps, + ChartAxis, + ChartTooltip, + ChartAxisProps, + ChartThemeColor, + ChartThemeVariant, } from '@patternfly/react-charts'; import './FancyGroupedBarChart.scss'; export interface FancyGroupedBarChartData { - colors?: string[]; - legends?: string[]; - values: Array>; + colors?: string[]; + legends?: string[]; + values: Array< + Array<{ + x: string; + y: number; + label?: string; + }> + >; } interface Props { - data: FancyGroupedBarChartData; - chartProps?: ChartProps; - legendProps?: ChartLegendProps; - chartGroupProps?: ChartGroupProps; - chartBarProps?: ChartBarProps; - dependentChartAxisProps?: ChartAxisProps; - independentChartAxisProps?: ChartAxisProps; - footer?: any; -} - -interface State { + data: FancyGroupedBarChartData; + chartProps?: ChartProps; + legendProps?: ChartLegendProps; + chartGroupProps?: ChartGroupProps; + chartBarProps?: ChartBarProps; + dependentChartAxisProps?: ChartAxisProps; + independentChartAxisProps?: ChartAxisProps; + footer?: any; } const baseLegendStyle = { - labels: { - fontSize: 9 - } + labels: { + fontSize: 9, + }, }; const baseDependentAxisStyle = { - axis: { stroke: 'none' } -}; - -const baseIndependentAxisStyle = { + axis: { stroke: 'none' }, }; -class FancyGroupedBarChart extends Component { +const baseIndependentAxisStyle = {}; - constructor(props: Props) { - super(props); - } +class FancyGroupedBarChart extends Component { + constructor(props: Props) { + super(props); + } - public render() { - const { - data, - chartProps, - legendProps, - chartGroupProps, - chartBarProps, - dependentChartAxisProps, - independentChartAxisProps, - footer - } = this.props; + public render() { + const { + data, + chartProps, + legendProps, + chartGroupProps, + chartBarProps, + dependentChartAxisProps, + independentChartAxisProps, + footer, + } = this.props; - const { style: legendStyle, ...restLegendProps } = legendProps || { style: { }}; - const { style: dependenAxisStyles, ...restDependentChartAxisProps } = dependentChartAxisProps || { style: { }}; - const { style: independenAxisStyles, ...restIndependentChartAxisProps } = independentChartAxisProps || { style: { }}; + const { style: legendStyle, ...restLegendProps } = legendProps || { style: {} }; + const { + style: dependenAxisStyles, + ...restDependentChartAxisProps + } = dependentChartAxisProps || { style: {} }; + const { + style: independenAxisStyles, + ...restIndependentChartAxisProps + } = independentChartAxisProps || { style: {} }; - const colors = data.colors ? data.colors : undefined; + const colors = data.colors ? data.colors : undefined; - return ( - -
- { - data.legends && - ({ name: value })) } - colorScale={ colors } - themeColor={ colors ? undefined : ChartThemeColor.multiOrdered } - themeVariant={ colors ? undefined: ChartThemeVariant.light } - orientation={ 'horizontal' } - style={ Object.assign({ }, baseLegendStyle, legendStyle) } - { ...restLegendProps } - /> - } - - - - - { data.values.map((value, index: number) => { - return ( - } - { ...chartBarProps } - /> - ); - }) } - - - { - footer &&
{ footer }
- } -
-
- ); - } + return ( + +
+ {data.legends && ( + ({ name: value }))} + colorScale={colors} + themeColor={colors ? undefined : ChartThemeColor.multiOrdered} + themeVariant={colors ? undefined : ChartThemeVariant.light} + orientation={'horizontal'} + style={Object.assign({}, baseLegendStyle, legendStyle)} + {...restLegendProps} + /> + )} + + + + + {data.values.map((value, index: number) => { + return ( + } + {...chartBarProps} + /> + ); + })} + + + {footer &&
{footer}
} +
+
+ ); + } } export default FancyGroupedBarChart; diff --git a/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.test.tsx b/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.test.tsx index e4021c7c..cdd83993 100644 --- a/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.test.tsx +++ b/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.test.tsx @@ -4,32 +4,29 @@ import { FetchErrorEmptyState, FetchErrorEmptyStateProps } from './FetchErrorEmp import { Button } from '@patternfly/react-core'; describe('FetchErrorEmptyState', () => { - it('FetchErrorEmptyState should render', () => { - const props: FetchErrorEmptyStateProps = { - onRetry: jest.fn() - }; + it('FetchErrorEmptyState should render', () => { + const props: FetchErrorEmptyStateProps = { + onRetry: jest.fn(), + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('FetchErrorEmptyState on retry click should execute callback', () => { - // Given - const callbackMock = jest.fn(); - const props: FetchErrorEmptyStateProps = { - onRetry: callbackMock - }; + it('FetchErrorEmptyState on retry click should execute callback', () => { + // Given + const callbackMock = jest.fn(); + const props: FetchErrorEmptyStateProps = { + onRetry: callbackMock, + }; - // When + // When - const wrapper = shallow(); - wrapper - .find(Button) - .first() - .simulate('click'); + const wrapper = shallow(); + wrapper.find(Button).first().simulate('click'); - // Then + // Then - expect(callbackMock.mock.calls.length).toEqual(1); - }); + expect(callbackMock.mock.calls.length).toEqual(1); + }); }); diff --git a/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.tsx b/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.tsx index f4ce5782..78f06582 100644 --- a/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.tsx +++ b/src/PresentationalComponents/FetchErrorEmptyState/FetchErrorEmptyState.tsx @@ -1,32 +1,32 @@ import React from 'react'; import { - Bullseye, - EmptyState, - EmptyStateIcon, - Title, - EmptyStateBody, - Button, - EmptyStateVariant + Bullseye, + EmptyState, + EmptyStateIcon, + Title, + EmptyStateBody, + Button, + EmptyStateVariant, } from '@patternfly/react-core'; import { ErrorCircleOIcon } from '@patternfly/react-icons'; export interface FetchErrorEmptyStateProps { - onRetry: () => void; + onRetry: () => void; } export const FetchErrorEmptyState: React.FC = ({ onRetry }) => { - return ( - - - - - Error - - Something unexpected happend, please try again! - - - - ); + return ( + + + + + Error + + Something unexpected happend, please try again! + + + + ); }; diff --git a/src/PresentationalComponents/Icons/process-improvement.svg.test.tsx b/src/PresentationalComponents/Icons/process-improvement.svg.test.tsx index 8ed7fef2..c12cf1cb 100644 --- a/src/PresentationalComponents/Icons/process-improvement.svg.test.tsx +++ b/src/PresentationalComponents/Icons/process-improvement.svg.test.tsx @@ -1,20 +1,15 @@ -import React from "react"; +import React from 'react'; import { shallow } from 'enzyme'; import ProcessImprovementIcon from './process-improvement_svg'; -describe("process-improvement.svg", () => { - it("expect to render", () => { - const wrapper = shallow( - - ); +describe('process-improvement.svg', () => { + it('expect to render', () => { + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to render with props", () => { - const wrapper = shallow( - - ); + it('expect to render with props', () => { + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/Icons/process-improvement_svg.js b/src/PresentationalComponents/Icons/process-improvement_svg.js index bf25a642..32dd4110 100644 --- a/src/PresentationalComponents/Icons/process-improvement_svg.js +++ b/src/PresentationalComponents/Icons/process-improvement_svg.js @@ -1,11 +1,11 @@ import React from 'react'; export default function Icon(props) { - return ( - - Icon_RH_Diagram_ProcessImprovement-B_RGB_Black - { /* eslint-disable max-len */ } - - - ); + return ( + + Icon_RH_Diagram_ProcessImprovement-B_RGB_Black + {/* eslint-disable max-len */} + + + ); } diff --git a/src/PresentationalComponents/LoadingState/LoadingState.test.tsx b/src/PresentationalComponents/LoadingState/LoadingState.test.tsx index cfdcf3ef..6f4cd169 100644 --- a/src/PresentationalComponents/LoadingState/LoadingState.test.tsx +++ b/src/PresentationalComponents/LoadingState/LoadingState.test.tsx @@ -1,9 +1,9 @@ -import React from "react"; -import { shallow } from "enzyme"; -import { LoadingState } from "./LoadingState"; +import React from 'react'; +import { shallow } from 'enzyme'; +import { LoadingState } from './LoadingState'; -describe("LoadingState", () => { - it("expect to render placeholder when loading", () => { +describe('LoadingState', () => { + it('expect to render placeholder when loading', () => { const wrapper = shallow( loaded @@ -12,7 +12,7 @@ describe("LoadingState", () => { expect(wrapper).toMatchSnapshot(); }); - it("expect to render children when loaded", () => { + it('expect to render children when loaded', () => { const wrapper = shallow( loaded @@ -21,10 +21,8 @@ describe("LoadingState", () => { expect(wrapper).toMatchSnapshot(); }); - it("expect to render children when undefined", () => { - const wrapper = shallow( - loaded - ); + it('expect to render children when undefined', () => { + const wrapper = shallow(loaded); expect(wrapper).toMatchSnapshot(); }); }); diff --git a/src/PresentationalComponents/LoadingState/LoadingState.tsx b/src/PresentationalComponents/LoadingState/LoadingState.tsx index bbe6a6ee..080bc308 100644 --- a/src/PresentationalComponents/LoadingState/LoadingState.tsx +++ b/src/PresentationalComponents/LoadingState/LoadingState.tsx @@ -1,10 +1,10 @@ interface Props { - placeholder: any, - children: any, - loading?: boolean // Is assumed to be false if undefined + placeholder: any; + children: any; + loading?: boolean; // Is assumed to be false if undefined } export const LoadingState = ({ loading, placeholder, children }: Props) => - loading ? placeholder : children; + loading ? placeholder : children; export default LoadingState; diff --git a/src/PresentationalComponents/ReportCard/ReportCard.test.tsx b/src/PresentationalComponents/ReportCard/ReportCard.test.tsx index a972f2c0..2f53ceb5 100644 --- a/src/PresentationalComponents/ReportCard/ReportCard.test.tsx +++ b/src/PresentationalComponents/ReportCard/ReportCard.test.tsx @@ -1,37 +1,33 @@ -import React from "react"; -import { shallow } from "enzyme"; -import ReportCard from "./ReportCard"; +import React from 'react'; +import { shallow } from 'enzyme'; +import ReportCard from './ReportCard'; -describe("ReportCard", () => { - it("expect to render with bullseye", () => { - const wrapper = shallow( - - children - - ); +describe('ReportCard', () => { + it('expect to render with bullseye', () => { + const wrapper = shallow(children); expect(wrapper).toMatchSnapshot(); }); - it("expect to render without bullseye", () => { + it('expect to render without bullseye', () => { const wrapper = shallow( - + children ); expect(wrapper).toMatchSnapshot(); }); - it("expect to render with custom classes", () => { + it('expect to render with custom classes', () => { const wrapper = shallow( + bodyClass="customBodyClass" + > loaded ); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/ReportCard/ReportCard.tsx b/src/PresentationalComponents/ReportCard/ReportCard.tsx index b11ef3e6..aa53b4f2 100644 --- a/src/PresentationalComponents/ReportCard/ReportCard.tsx +++ b/src/PresentationalComponents/ReportCard/ReportCard.tsx @@ -1,66 +1,50 @@ import React, { Component } from 'react'; -import { - Card, - CardBody, - Bullseye -} from '@patternfly/react-core'; +import { Card, CardBody, Bullseye } from '@patternfly/react-core'; import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/Card/card'; import titleStyles from '@patternfly/react-styles/css/components/Title/title'; interface Props { - title: any; - children: any; - skipBullseye?: boolean; - cardClass?: any; - headerClass?: any; - bodyClass?: any; + title: any; + children: any; + skipBullseye?: boolean; + cardClass?: any; + headerClass?: any; + bodyClass?: any; } -interface State { -} - -class ReportCard extends Component { - - constructor(props: Props) { - super(props); - } +class ReportCard extends Component { + constructor(props: Props) { + super(props); + } - public render() { - const { - title, - children, - skipBullseye, - cardClass, - headerClass, - bodyClass - } = this.props; + public render() { + const { title, children, skipBullseye, cardClass, headerClass, bodyClass } = this.props; - return ( - - -
- { title } -
- - { - skipBullseye ? - ( - - { children } - - ) : - ( - - { children } - - ) - } - -
-
- ); - } + return ( + + +
+ {title} +
+ + {skipBullseye ? ( + {children} + ) : ( + {children} + )} + +
+
+ ); + } } export default ReportCard; diff --git a/src/PresentationalComponents/ReportViewPage/ReportViewPage.test.tsx b/src/PresentationalComponents/ReportViewPage/ReportViewPage.test.tsx index f1130d59..32585b25 100644 --- a/src/PresentationalComponents/ReportViewPage/ReportViewPage.test.tsx +++ b/src/PresentationalComponents/ReportViewPage/ReportViewPage.test.tsx @@ -1,6 +1,6 @@ -import React from "react"; -import { shallow } from "enzyme"; -import ReportViewPage, { Props } from "./ReportViewPage"; +import React from 'react'; +import { shallow } from 'enzyme'; +import ReportViewPage, { Props } from './ReportViewPage'; const baseProps: Props = { report: { @@ -10,92 +10,90 @@ const baseProps: Props = { payloadName: '123.zip', inserted: 123456871, lastUpdate: 123456879, - status: 'IN_PROGRESS' + status: 'IN_PROGRESS', }, reportFetchStatus: { error: null, - status: "complete" + status: 'complete', }, match: null, history: null, location: { - pathname: '' - } + pathname: '', + }, }; -describe("ReportViewPage", () => { - - it("expect to redirect on fetchReport error", () => { +describe('ReportViewPage', () => { + it('expect to redirect on fetchReport error', () => { const props: Props = { ...baseProps, reportFetchStatus: { ...baseProps.reportFetchStatus, - error: 'A error message' - } + error: 'A error message', + }, }; const wrapper = shallow( - + children ); expect(wrapper).toMatchSnapshot(); }); - it("expect to render skeleton", () => { + it('expect to render skeleton', () => { const props: Props = { ...baseProps, reportFetchStatus: { ...baseProps.reportFetchStatus, error: null, - status: "inProgress" - } + status: 'inProgress', + }, }; const wrapper = shallow( - + children ); expect(wrapper).toMatchSnapshot(); }); - it("expect to render tabs when fetch status is complete", () => { + it('expect to render tabs when fetch status is complete', () => { const props: Props = { ...baseProps, reportFetchStatus: { ...baseProps.reportFetchStatus, error: null, - status: "complete" - } + status: 'complete', + }, }; const wrapper = shallow( - + children ); expect(wrapper).toMatchSnapshot(); }); - it("expect to render tabs when fetch status is complete and report is null", () => { + it('expect to render tabs when fetch status is complete and report is null', () => { const props: Props = { ...baseProps, report: null, reportFetchStatus: { ...baseProps.reportFetchStatus, error: null, - status: "complete" - } + status: 'complete', + }, }; const wrapper = shallow( - + children ); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/ReportViewPage/ReportViewPage.tsx b/src/PresentationalComponents/ReportViewPage/ReportViewPage.tsx index 890dc786..2dbbab53 100644 --- a/src/PresentationalComponents/ReportViewPage/ReportViewPage.tsx +++ b/src/PresentationalComponents/ReportViewPage/ReportViewPage.tsx @@ -1,163 +1,167 @@ import React, { Fragment, Component } from 'react'; import { Link, Redirect } from 'react-router-dom'; import { - Tabs, - Tab, - Breadcrumb, - BreadcrumbItem, - Stack, - StackItem, - Grid, - GridItem + Tabs, + Tab, + Breadcrumb, + BreadcrumbItem, + Stack, + StackItem, + Grid, + GridItem, } from '@patternfly/react-core'; import { - PageHeader, - PageHeaderTitle + PageHeader, + PageHeaderTitle, } from '@redhat-cloud-services/frontend-components/components/PageHeader'; -import { - Main -} from '@redhat-cloud-services/frontend-components/components/Main'; -import { - Skeleton -} from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; +import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; import { Report } from '../../models'; import { RouterGlobalProps } from '../../models/router'; import { ObjectFetchStatus } from '../../models/state'; import { formatDate } from '../../Utilities/formatValue'; -import { REPORT_VIEW_PATHS, DEFAULT_VIEW_PATH_INDEX, INITIAL_SAVINGS_ESTIMATION_KEY } from '../../pages/ReportView/ReportViewConstants'; +import { + REPORT_VIEW_PATHS, + DEFAULT_VIEW_PATH_INDEX, + INITIAL_SAVINGS_ESTIMATION_KEY, +} from '../../pages/ReportView/ReportViewConstants'; export interface Props extends RouterGlobalProps { - mainStyle?: any; - report: Report | null; - reportFetchStatus: ObjectFetchStatus; -}; + mainStyle?: any; + report: Report | null; + reportFetchStatus: ObjectFetchStatus; +} interface State { - activeTabKey: number | string; + activeTabKey: number | string; } class ReportViewPage extends Component { + constructor(props: Props) { + super(props); - constructor(props: Props) { - super(props); - - let activeTabKey = DEFAULT_VIEW_PATH_INDEX; - - REPORT_VIEW_PATHS.forEach((val, index) => { - if (props.location.pathname.endsWith(val.path)) { - activeTabKey = index; - } - }); - - this.state = { - activeTabKey - }; - } + let activeTabKey = DEFAULT_VIEW_PATH_INDEX; - public handleTabClick = (_event: React.MouseEvent, tabIndex: number | string) => { - this.setState({ - activeTabKey: tabIndex - }); + REPORT_VIEW_PATHS.forEach((val, index) => { + if (props.location.pathname.endsWith(val.path)) { + activeTabKey = index; + } + }); - const { history, match } = this.props; - - history.push(`${match.url}/${REPORT_VIEW_PATHS[tabIndex].path}`); - }; - - public renderTabs = () => { - const { report } = this.props; - const { activeTabKey } = this.state; - const currentBreadcrumb = report ? report.reportName : ''; - - return ( - - - - Reports - - { currentBreadcrumb } - -
-

- { `${REPORT_VIEW_PATHS[activeTabKey].title} (${ currentBreadcrumb })` } -

-

- { (report && report.reportDescription) && {report.reportDescription}
} - { (REPORT_VIEW_PATHS[activeTabKey].key === INITIAL_SAVINGS_ESTIMATION_KEY) && - Source: vSphere Enterprise Plus
- Target: Red Hat Virtualization
-
- } - Date: { report ? formatDate(new Date(report.lastUpdate)) : 'Unknown' } -

-
- - { REPORT_VIEW_PATHS.map((elem, index) => { - return ( - - ); - })} - -
- ); + this.state = { + activeTabKey, }; - - public renderTabsSkeleton = () => { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - ); - }; - - public render() { - const { reportFetchStatus, children } = this.props; - - if (reportFetchStatus.error) { - return ; - } - - const isFetchComplete: boolean = reportFetchStatus.status === 'complete'; - - return ( - - - - -
- { isFetchComplete ? children : '' } -
-
- ); + } + + public handleTabClick = ( + _event: React.MouseEvent, + tabIndex: number | string + ) => { + this.setState({ + activeTabKey: tabIndex, + }); + + const { history, match } = this.props; + + history.push(`${match.url}/${REPORT_VIEW_PATHS[tabIndex].path}`); + }; + + public renderTabs = () => { + const { report } = this.props; + const { activeTabKey } = this.state; + const currentBreadcrumb = report ? report.reportName : ''; + + return ( + + + + Reports + + {currentBreadcrumb} + +
+

+ {`${REPORT_VIEW_PATHS[activeTabKey].title} (${currentBreadcrumb})`} +

+

+ {report && report.reportDescription && ( + + {report.reportDescription} +
+
+ )} + {REPORT_VIEW_PATHS[activeTabKey].key === INITIAL_SAVINGS_ESTIMATION_KEY && ( + + Source: vSphere Enterprise Plus +
+ Target: Red Hat Virtualization +
+
+ )} + Date:  + {report ? formatDate(new Date(report.lastUpdate)) : 'Unknown'} +

+
+ + {REPORT_VIEW_PATHS.map((elem, index) => { + return ; + })} + +
+ ); + }; + + public renderTabsSkeleton = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + ); + }; + + public render() { + const { reportFetchStatus, children } = this.props; + + if (reportFetchStatus.error) { + return ; } + + const isFetchComplete: boolean = reportFetchStatus.status === 'complete'; + + return ( + + + + +
{isFetchComplete ? children : ''}
+
+ ); + } } export default ReportViewPage; diff --git a/src/PresentationalComponents/Reports/Environment/Environment.test.tsx b/src/PresentationalComponents/Reports/Environment/Environment.test.tsx index ba546fe3..d82ac723 100644 --- a/src/PresentationalComponents/Reports/Environment/Environment.test.tsx +++ b/src/PresentationalComponents/Reports/Environment/Environment.test.tsx @@ -1,7 +1,7 @@ -import React from "react"; -import { shallow } from "enzyme"; -import Environment from "./Environment"; -import { EnvironmentModel } from "../../../models"; +import React from 'react'; +import { shallow } from 'enzyme'; +import Environment from './Environment'; +import { EnvironmentModel } from '../../../models'; const baseData: EnvironmentModel = { sourceProductIndicator: 0, @@ -9,62 +9,52 @@ const baseData: EnvironmentModel = { year1Hypervisor: 12, year2Hypervisor: 123, year3Hypervisor: 1234, - growthRatePercentage: 0.05 + growthRatePercentage: 0.05, }; -describe("Environment", () => { - it("expect to render", () => { +describe('Environment', () => { + it('expect to render', () => { const data = { - ...baseData + ...baseData, }; - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to render using null and undefined data", () => { + it('expect to render using null and undefined data', () => { const data: EnvironmentModel = { - ...baseData + ...baseData, }; - + // Force null values - Object.keys(data).forEach(key => data[key] = null); + Object.keys(data).forEach((key) => (data[key] = null)); - const wrapper1 = shallow( - - ); + const wrapper1 = shallow(); expect(wrapper1).toMatchSnapshot(); - // Force undefined values - Object.keys(data).forEach(key => data[key] = undefined); + Object.keys(data).forEach((key) => (data[key] = undefined)); - const wrapper2 = shallow( - - ); + const wrapper2 = shallow(); expect(wrapper2).toMatchSnapshot(); }); - it("expect to render using values equal to 0", () => { + it('expect to render using values equal to 0', () => { const data = { ...baseData, hypervisors: 0, year1Hypervisor: 0, year2Hypervisor: 0, year3Hypervisor: 0, - growthRatePercentage: 0 + growthRatePercentage: 0, }; - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/Reports/Environment/Environment.tsx b/src/PresentationalComponents/Reports/Environment/Environment.tsx index 0eb36c77..a35b67fc 100644 --- a/src/PresentationalComponents/Reports/Environment/Environment.tsx +++ b/src/PresentationalComponents/Reports/Environment/Environment.tsx @@ -1,81 +1,69 @@ import React, { Component } from 'react'; -import { - Table, - TableBody, - TableVariant -} from '@patternfly/react-table'; +import { Table, TableBody, TableVariant } from '@patternfly/react-table'; import { EnvironmentModel } from '../../../models'; import { isNullOrUndefined } from '../../../Utilities/formUtils'; import { formatNumber } from '../../../Utilities/formatValue'; interface Props { - data: EnvironmentModel + data: EnvironmentModel; } -interface State { -} - -class Environment extends Component { - - constructor(props: Props) { - super(props); - } +class Environment extends Component { + constructor(props: Props) { + super(props); + } - public render() { - const { data: { - hypervisors, - year1Hypervisor, - year2Hypervisor, - year3Hypervisor, - growthRatePercentage - }} = this.props; + public render() { + const { + data: { + hypervisors, + year1Hypervisor, + year2Hypervisor, + year3Hypervisor, + growthRatePercentage, + }, + } = this.props; - const columns = [ - '', - '', - '' - ]; + const columns = ['', '', '']; - const rows = [ - [ - 'Licenses for ESXi Hypervisors (2 socket)', - '', - isNullOrUndefined(hypervisors) ? 'Unknown' : formatNumber(hypervisors, 0) - ], - [ - 'VMware licenses (2 socket) to migrate to Red Hat technologies', - 'Year1 (incremental)', - isNullOrUndefined(year1Hypervisor) ? 'Unknown' : formatNumber(year1Hypervisor, 0) - ], - [ - '', - 'Year2 (incremental)', - isNullOrUndefined(year2Hypervisor) ? 'Unknown' : formatNumber(year2Hypervisor, 0) - ], - [ - '', - 'Year3 (incremental)', - isNullOrUndefined(year3Hypervisor) ? 'Unknown' : formatNumber(year3Hypervisor, 0) - ], - [ - 'Year-over-year growth rate for new hypervisors', - '', - isNullOrUndefined(growthRatePercentage) ? 'Unknown' : `${(growthRatePercentage * 100).toLocaleString()}%` - ] - ]; + const rows = [ + [ + 'Licenses for ESXi Hypervisors (2 socket)', + '', + isNullOrUndefined(hypervisors) ? 'Unknown' : formatNumber(hypervisors, 0), + ], + [ + 'VMware licenses (2 socket) to migrate to Red Hat technologies', + 'Year1 (incremental)', + isNullOrUndefined(year1Hypervisor) ? 'Unknown' : formatNumber(year1Hypervisor, 0), + ], + [ + '', + 'Year2 (incremental)', + isNullOrUndefined(year2Hypervisor) ? 'Unknown' : formatNumber(year2Hypervisor, 0), + ], + [ + '', + 'Year3 (incremental)', + isNullOrUndefined(year3Hypervisor) ? 'Unknown' : formatNumber(year3Hypervisor, 0), + ], + [ + 'Year-over-year growth rate for new hypervisors', + '', + isNullOrUndefined(growthRatePercentage) + ? 'Unknown' + : `${(growthRatePercentage * 100).toLocaleString()}%`, + ], + ]; - return ( - - - -
-
- ); - } + return ( + + + +
+
+ ); + } } export default Environment; diff --git a/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.test.tsx b/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.test.tsx index 0d19316a..c948ce99 100644 --- a/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.test.tsx +++ b/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.test.tsx @@ -1,7 +1,7 @@ -import React from "react"; -import { shallow } from "enzyme"; -import ProjectCostBreakdownTable from "./ProjectCostBreakdownTable"; -import { RHVRampUpCostsModel, SourceRampDownCostsModel } from "../../../models"; +import React from 'react'; +import { shallow } from 'enzyme'; +import ProjectCostBreakdownTable from './ProjectCostBreakdownTable'; +import { RHVRampUpCostsModel, SourceRampDownCostsModel } from '../../../models'; const baseRhvRampUpCostsModel: RHVRampUpCostsModel = { year1RhvTotalValue: 1000, @@ -16,59 +16,59 @@ const baseRhvRampUpCostsModel: RHVRampUpCostsModel = { year1RhvGrandTotalGrowthValue: 0, year2RhvGrandTotalGrowthValue: 0, - year3RhvGrandTotalGrowthValue: 0 + year3RhvGrandTotalGrowthValue: 0, }; const baseSourceRampDownCostsModel: SourceRampDownCostsModel = { year1SourceMaintenanceTotalValue: 1000, year2SourceMaintenanceTotalValue: 2000, - year3SourceMaintenanceTotalValue: 3000 -} + year3SourceMaintenanceTotalValue: 3000, +}; -describe("ProjectCostBreakdownTable", () => { - it("expect to render", () => { +describe('ProjectCostBreakdownTable', () => { + it('expect to render', () => { const rhvRampUpCostsModel: RHVRampUpCostsModel = { - ...baseRhvRampUpCostsModel + ...baseRhvRampUpCostsModel, }; const sourceRampDownCostsModel: SourceRampDownCostsModel = { - ...baseSourceRampDownCostsModel + ...baseSourceRampDownCostsModel, }; const wrapper = shallow( ); expect(wrapper).toMatchSnapshot(); }); - it("expect to render using null and undefined data", () => { + it('expect to render using null and undefined data', () => { const rhvRampUpCostsModel: RHVRampUpCostsModel = { - ...baseRhvRampUpCostsModel + ...baseRhvRampUpCostsModel, }; - + const sourceRampDownCostsModel: SourceRampDownCostsModel = { - ...baseSourceRampDownCostsModel + ...baseSourceRampDownCostsModel, }; // Force null values - Object.keys(rhvRampUpCostsModel).forEach(key => rhvRampUpCostsModel[key] = null); - Object.keys(sourceRampDownCostsModel).forEach(key => sourceRampDownCostsModel[key] = null); + Object.keys(rhvRampUpCostsModel).forEach((key) => (rhvRampUpCostsModel[key] = null)); + Object.keys(sourceRampDownCostsModel).forEach((key) => (sourceRampDownCostsModel[key] = null)); const wrapper = shallow( ); expect(wrapper).toMatchSnapshot(); }); - it("expect to render using values equal to 0", () => { + it('expect to render using values equal to 0', () => { const rhvRampUpCostsModel: RHVRampUpCostsModel = { ...baseRhvRampUpCostsModel, year1RhvTotalValue: 0, @@ -79,24 +79,23 @@ describe("ProjectCostBreakdownTable", () => { year3RhvTotalGrowthValue: 0, rhvSwitchLearningSubsValue: 0, rhvSwitchConsultValue: 0, - rhvSwitchTAndEValue: 0 + rhvSwitchTAndEValue: 0, }; const sourceRampDownCostsModel: SourceRampDownCostsModel = { ...baseSourceRampDownCostsModel, - year1SourceMaintenanceTotalValue: 0, - year2SourceMaintenanceTotalValue: 0, - year3SourceMaintenanceTotalValue: 0 + year1SourceMaintenanceTotalValue: 0, + year2SourceMaintenanceTotalValue: 0, + year3SourceMaintenanceTotalValue: 0, }; const wrapper = shallow( ); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.tsx b/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.tsx index c44df488..860f0f5c 100644 --- a/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.tsx +++ b/src/PresentationalComponents/Reports/ProjectCostBreakdownTable/ProjectCostBreakdownTable.tsx @@ -1,206 +1,224 @@ import React, { Component } from 'react'; -import { - Table, - TableBody, - TableVariant -} from '@patternfly/react-table'; +import { Table, TableBody, TableVariant } from '@patternfly/react-table'; import { formatValue } from '../../../Utilities/formatValue'; import { RHVRampUpCostsModel, SourceRampDownCostsModel } from '../../../models'; import { isNullOrUndefined } from '../../../Utilities/formUtils'; interface Props { - rhvRampUpCostsModel: RHVRampUpCostsModel; - sourceRampDownCostsModel: SourceRampDownCostsModel; + rhvRampUpCostsModel: RHVRampUpCostsModel; + sourceRampDownCostsModel: SourceRampDownCostsModel; } -interface State { -} - -class ProjectCostBreakdownTable extends Component { - - constructor(props: Props) { - super(props); +class ProjectCostBreakdownTable extends Component { + constructor(props: Props) { + super(props); + } + + public getSourceMaintenanceTotal = (): number | undefined => { + const { sourceRampDownCostsModel } = this.props; + + if ( + isNullOrUndefined( + sourceRampDownCostsModel.year1SourceMaintenanceTotalValue, + sourceRampDownCostsModel.year2SourceMaintenanceTotalValue, + sourceRampDownCostsModel.year3SourceMaintenanceTotalValue + ) + ) { + return undefined; } - public getSourceMaintenanceTotal = (): number | undefined => { - const { sourceRampDownCostsModel } = this.props; - - if (isNullOrUndefined( - sourceRampDownCostsModel.year1SourceMaintenanceTotalValue, - sourceRampDownCostsModel.year2SourceMaintenanceTotalValue, - sourceRampDownCostsModel.year3SourceMaintenanceTotalValue - )) { - return undefined; - } - - return sourceRampDownCostsModel.year1SourceMaintenanceTotalValue + - sourceRampDownCostsModel.year2SourceMaintenanceTotalValue + - sourceRampDownCostsModel.year3SourceMaintenanceTotalValue; + return ( + sourceRampDownCostsModel.year1SourceMaintenanceTotalValue + + sourceRampDownCostsModel.year2SourceMaintenanceTotalValue + + sourceRampDownCostsModel.year3SourceMaintenanceTotalValue + ); + }; + + public getHypervisorSubscriptions = (): number | undefined => { + const { rhvRampUpCostsModel } = this.props; + + if ( + isNullOrUndefined( + rhvRampUpCostsModel.year1RhvTotalValue, + rhvRampUpCostsModel.year1RhvTotalValue, + rhvRampUpCostsModel.year1RhvTotalValue + ) + ) { + return undefined; } - public getHypervisorSubscriptions = (): number | undefined => { - const { rhvRampUpCostsModel } = this.props; - - if (isNullOrUndefined( - rhvRampUpCostsModel.year1RhvTotalValue, - rhvRampUpCostsModel.year1RhvTotalValue, - rhvRampUpCostsModel.year1RhvTotalValue - )) { - return undefined; - } - - return rhvRampUpCostsModel.year1RhvTotalValue + - rhvRampUpCostsModel.year2RhvTotalValue + - rhvRampUpCostsModel.year3RhvTotalValue; + return ( + rhvRampUpCostsModel.year1RhvTotalValue + + rhvRampUpCostsModel.year2RhvTotalValue + + rhvRampUpCostsModel.year3RhvTotalValue + ); + }; + + public gethypervisorGrowthSubscriptions = (): number | undefined => { + const { rhvRampUpCostsModel } = this.props; + + if ( + isNullOrUndefined( + rhvRampUpCostsModel.year1RhvTotalGrowthValue, + rhvRampUpCostsModel.year2RhvTotalGrowthValue, + rhvRampUpCostsModel.year3RhvTotalGrowthValue + ) + ) { + return undefined; } - public gethypervisorGrowthSubscriptions = (): number | undefined => { - const { rhvRampUpCostsModel } = this.props; - - if (isNullOrUndefined( - rhvRampUpCostsModel.year1RhvTotalGrowthValue, - rhvRampUpCostsModel.year2RhvTotalGrowthValue, - rhvRampUpCostsModel.year3RhvTotalGrowthValue - )) { - return undefined; - } - - // null or undefined values are already validaded above - // "|| 0" is written just to avoid "Object is possibly 'undefined'" warning - return (rhvRampUpCostsModel.year1RhvTotalGrowthValue || 0) + - (rhvRampUpCostsModel.year2RhvTotalGrowthValue || 0) + - (rhvRampUpCostsModel.year3RhvTotalGrowthValue || 0); + // null or undefined values are already validaded above + // "|| 0" is written just to avoid "Object is possibly 'undefined'" warning + return ( + (rhvRampUpCostsModel.year1RhvTotalGrowthValue || 0) + + (rhvRampUpCostsModel.year2RhvTotalGrowthValue || 0) + + (rhvRampUpCostsModel.year3RhvTotalGrowthValue || 0) + ); + }; + + public render() { + const { rhvRampUpCostsModel } = this.props; + + const sourceMaintenanceTotal = this.getSourceMaintenanceTotal(); + const hypervisorSubscriptions = this.getHypervisorSubscriptions(); + const hypervisorGrowthSubscriptions = this.gethypervisorGrowthSubscriptions(); + + const rhvSwitchLearningSubsValue = rhvRampUpCostsModel.rhvSwitchLearningSubsValue; + const rhvSwitchConsultValue = rhvRampUpCostsModel.rhvSwitchConsultValue; + const rhvSwitchTAndEValue = rhvRampUpCostsModel.rhvSwitchTAndEValue; + + let total: number | undefined; + if ( + !isNullOrUndefined( + sourceMaintenanceTotal, + hypervisorSubscriptions, + hypervisorGrowthSubscriptions, + rhvSwitchLearningSubsValue, + rhvSwitchConsultValue, + rhvSwitchTAndEValue + ) + ) { + total = + (sourceMaintenanceTotal || 0) + + (hypervisorSubscriptions || 0) + + (hypervisorGrowthSubscriptions || 0) + + rhvSwitchLearningSubsValue + + rhvSwitchConsultValue + + rhvSwitchTAndEValue; } - public render() { - const { rhvRampUpCostsModel } = this.props; - - const sourceMaintenanceTotal = this.getSourceMaintenanceTotal(); - const hypervisorSubscriptions = this.getHypervisorSubscriptions(); - const hypervisorGrowthSubscriptions = this.gethypervisorGrowthSubscriptions(); - - const rhvSwitchLearningSubsValue = rhvRampUpCostsModel.rhvSwitchLearningSubsValue; - const rhvSwitchConsultValue = rhvRampUpCostsModel.rhvSwitchConsultValue; - const rhvSwitchTAndEValue = rhvRampUpCostsModel.rhvSwitchTAndEValue; - - let total: number | undefined; - if (!isNullOrUndefined( - sourceMaintenanceTotal, - hypervisorSubscriptions, - hypervisorGrowthSubscriptions, - rhvSwitchLearningSubsValue, - rhvSwitchConsultValue, - rhvSwitchTAndEValue - )) { - total = (sourceMaintenanceTotal || 0) + - (hypervisorSubscriptions || 0) + - (hypervisorGrowthSubscriptions || 0) + - rhvSwitchLearningSubsValue + - rhvSwitchConsultValue + - rhvSwitchTAndEValue; - } - - const columns = [ - '', - '', - { title: '', props: { className: 'pf-u-text-align-right pf-m-width-30' }} - ]; - - const rows = [ - { - cells: [ - 'VMware maintenance', - 'VMware support costs (during migration)', - isNullOrUndefined(sourceMaintenanceTotal) ? 'Unknown' : formatValue(sourceMaintenanceTotal, 'usd', { fractionDigits: 0 }) - ] - }, - { - cells: [ - { - title:
 
- }, - { - title:
 
- }, - { - title:
 
- } - ] - }, - { - cells: [ - 'Red Hat Virtualization costs', - '', - '' - ] - }, - { - cells: [ - '', - 'Red Hat Virtualization Hosts subscriptions', - isNullOrUndefined(hypervisorSubscriptions) ? 'Unknown' : formatValue(hypervisorSubscriptions, 'usd', { fractionDigits: 0 }) - ] - }, - { - cells: [ - '', - 'Red Hat Virtualization Hosts growth subscriptions', - isNullOrUndefined(hypervisorGrowthSubscriptions) ? 'Unknown' : formatValue(hypervisorGrowthSubscriptions, 'usd', { fractionDigits: 0 }) - ] - }, - { - cells: [ - 'Red Hat training and services', - '', - '' - ] - }, - { - cells: [ - '', - 'Red Hat training', - isNullOrUndefined(rhvSwitchLearningSubsValue) ? 'Unknown' : formatValue(rhvSwitchLearningSubsValue, 'usd', { fractionDigits: 0 }) - ] - }, - { - cells: [ - '', - 'Red Hat consulting', - isNullOrUndefined(rhvSwitchConsultValue) ? 'Unknown' : formatValue(rhvSwitchConsultValue, 'usd', { fractionDigits: 0 }) - ] - }, - { - cells: [ - '', - 'Travel and lodging', - isNullOrUndefined(rhvSwitchTAndEValue) ? 'Unknown' : formatValue(rhvSwitchTAndEValue, 'usd', { fractionDigits: 0 }) - ] - }, - { - cells: [ - { - title: Total - }, - '', - { - title: { isNullOrUndefined(total) ? 'Unknown' : formatValue(total, 'usd', { fractionDigits: 0 }) } - } - ] - } - ]; - - return ( - - - -
-
- ); - } + const columns = [ + '', + '', + { title: '', props: { className: 'pf-u-text-align-right pf-m-width-30' } }, + ]; + + const rows = [ + { + cells: [ + 'VMware maintenance', + 'VMware support costs (during migration)', + isNullOrUndefined(sourceMaintenanceTotal) + ? 'Unknown' + : formatValue(sourceMaintenanceTotal, 'usd', { fractionDigits: 0 }), + ], + }, + { + cells: [ + { + title:
 
, + }, + { + title:
 
, + }, + { + title:
 
, + }, + ], + }, + { + cells: ['Red Hat Virtualization costs', '', ''], + }, + { + cells: [ + '', + 'Red Hat Virtualization Hosts subscriptions', + isNullOrUndefined(hypervisorSubscriptions) + ? 'Unknown' + : formatValue(hypervisorSubscriptions, 'usd', { fractionDigits: 0 }), + ], + }, + { + cells: [ + '', + 'Red Hat Virtualization Hosts growth subscriptions', + isNullOrUndefined(hypervisorGrowthSubscriptions) + ? 'Unknown' + : formatValue(hypervisorGrowthSubscriptions, 'usd', { fractionDigits: 0 }), + ], + }, + { + cells: ['Red Hat training and services', '', ''], + }, + { + cells: [ + '', + 'Red Hat training', + isNullOrUndefined(rhvSwitchLearningSubsValue) + ? 'Unknown' + : formatValue(rhvSwitchLearningSubsValue, 'usd', { fractionDigits: 0 }), + ], + }, + { + cells: [ + '', + 'Red Hat consulting', + isNullOrUndefined(rhvSwitchConsultValue) + ? 'Unknown' + : formatValue(rhvSwitchConsultValue, 'usd', { fractionDigits: 0 }), + ], + }, + { + cells: [ + '', + 'Travel and lodging', + isNullOrUndefined(rhvSwitchTAndEValue) + ? 'Unknown' + : formatValue(rhvSwitchTAndEValue, 'usd', { fractionDigits: 0 }), + ], + }, + { + cells: [ + { + title: Total, + }, + '', + { + title: ( + + {isNullOrUndefined(total) + ? 'Unknown' + : formatValue(total, 'usd', { fractionDigits: 0 })} + + ), + }, + ], + }, + ]; + + return ( + + + +
+
+ ); + } } export default ProjectCostBreakdownTable; diff --git a/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.test.tsx b/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.test.tsx index 6111e167..f1505b23 100644 --- a/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.test.tsx +++ b/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.test.tsx @@ -1,70 +1,52 @@ -import React from "react"; -import { shallow } from "enzyme"; -import RenewalEstimation from "./RenewalEstimation"; -import { SourceCostsModel } from "../../../models"; +import React from 'react'; +import { shallow } from 'enzyme'; +import RenewalEstimation from './RenewalEstimation'; +import { SourceCostsModel } from '../../../models'; const baseSourceCostsModel: SourceCostsModel = { sourceRenewHighValue: 1000, sourceRenewLikelyValue: 2000, - sourceRenewLowValue: 3000 + sourceRenewLowValue: 3000, }; -describe("RenewalEstimation", () => { - it("expect to render", () => { +describe('RenewalEstimation', () => { + it('expect to render', () => { const data: SourceCostsModel = { - ...baseSourceCostsModel + ...baseSourceCostsModel, }; - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to render using null and undefined data", () => { + it('expect to render using null and undefined data', () => { const sourceCostModel: SourceCostsModel = { - ...baseSourceCostsModel + ...baseSourceCostsModel, }; - Object.keys(sourceCostModel).forEach(key => sourceCostModel[key] = null); + Object.keys(sourceCostModel).forEach((key) => (sourceCostModel[key] = null)); - const wrapper1 = shallow( - - ); + const wrapper1 = shallow(); expect(wrapper1).toMatchSnapshot(); + Object.keys(sourceCostModel).forEach((key) => (sourceCostModel[key] = undefined)); - Object.keys(sourceCostModel).forEach(key => sourceCostModel[key] = undefined); - - const wrapper2 = shallow( - - ); + const wrapper2 = shallow(); expect(wrapper2).toMatchSnapshot(); }); - it("expect to render using values equal to 0", () => { + it('expect to render using values equal to 0', () => { const data: SourceCostsModel = { ...baseSourceCostsModel, sourceRenewHighValue: 0, sourceRenewLikelyValue: 0, - sourceRenewLowValue: 0 + sourceRenewLowValue: 0, }; - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.tsx b/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.tsx index 9c3ef038..9aa5b61f 100644 --- a/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.tsx +++ b/src/PresentationalComponents/Reports/RenewalEstimation/RenewalEstimation.tsx @@ -1,68 +1,64 @@ import React, { Component } from 'react'; -import { - Table, - TableBody, - TableVariant, - TableHeader -} from '@patternfly/react-table'; +import { Table, TableBody, TableVariant, TableHeader } from '@patternfly/react-table'; import { formatValue } from '../../../Utilities/formatValue'; import { SourceCostsModel } from '../../../models'; import { isNullOrUndefined } from '../../../Utilities/formUtils'; interface Props { - data: SourceCostsModel + data: SourceCostsModel; } -interface State { -} - -class RenewalEstimation extends Component { - - constructor(props: Props) { - super(props); - } +class RenewalEstimation extends Component { + constructor(props: Props) { + super(props); + } - public render() { - const { data: { - sourceRenewHighValue, - sourceRenewLikelyValue, - sourceRenewLowValue - }} = this.props; + public render() { + const { + data: { sourceRenewHighValue, sourceRenewLikelyValue, sourceRenewLowValue }, + } = this.props; - const columns = [ - 'For vSphere Enterprise Plus', - { title: 'ELA renewal estimation', props: { className: 'pf-u-text-align-right' }} - ]; + const columns = [ + 'For vSphere Enterprise Plus', + { title: 'ELA renewal estimation', props: { className: 'pf-u-text-align-right' } }, + ]; - const rows = [ - [ - '-- As high as...', - isNullOrUndefined(sourceRenewHighValue) ? 'Unknown' : formatValue(sourceRenewHighValue, 'usd', { fractionDigits: 0 }) - ], - [ - '-- Most likely...', - isNullOrUndefined(sourceRenewLikelyValue) ? 'Unknown' : formatValue(sourceRenewLikelyValue, 'usd', { fractionDigits: 0 }) - ], - [ - '-- As low as...', - isNullOrUndefined(sourceRenewLowValue) ? 'Unknown' : formatValue(sourceRenewLowValue, 'usd', { fractionDigits: 0 }) - ] - ]; + const rows = [ + [ + '-- As high as...', + isNullOrUndefined(sourceRenewHighValue) + ? 'Unknown' + : formatValue(sourceRenewHighValue, 'usd', { fractionDigits: 0 }), + ], + [ + '-- Most likely...', + isNullOrUndefined(sourceRenewLikelyValue) + ? 'Unknown' + : formatValue(sourceRenewLikelyValue, 'usd', { fractionDigits: 0 }), + ], + [ + '-- As low as...', + isNullOrUndefined(sourceRenewLowValue) + ? 'Unknown' + : formatValue(sourceRenewLowValue, 'usd', { fractionDigits: 0 }), + ], + ]; - return ( - - - - -
-
- ); - } + return ( + + + + +
+
+ ); + } } export default RenewalEstimation; diff --git a/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.test.tsx b/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.test.tsx index b37b2ed7..f2ddc3ee 100644 --- a/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.test.tsx +++ b/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.test.tsx @@ -3,32 +3,32 @@ import { shallow } from 'enzyme'; import ScansRunTable, { Props } from './ScansRunTable'; const props: Props = { - scanRuns: [ - { - target: 'vSphere1', - smartStateEnabled: true, - date: 1468959781804 - }, - { - target: 'vSphere2', - smartStateEnabled: false, - date: 1568764800000 - }, - { - target: 'vSphere3', - smartStateEnabled: false, - date: "2020-05-26T09:50:25.771+0000" - } - ] + scanRuns: [ + { + target: 'vSphere1', + smartStateEnabled: true, + date: 1468959781804, + }, + { + target: 'vSphere2', + smartStateEnabled: false, + date: 1568764800000, + }, + { + target: 'vSphere3', + smartStateEnabled: false, + date: '2020-05-26T09:50:25.771+0000', + }, + ], }; describe('ScansRunTable should render table', () => { - it('expect to render table using smartStateEnabled mapping', () => { - const defaultProps: Props = { - ...props - }; + it('expect to render table using smartStateEnabled mapping', () => { + const defaultProps: Props = { + ...props, + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.tsx b/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.tsx index 2385bbc7..76fa7549 100644 --- a/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.tsx +++ b/src/PresentationalComponents/Reports/ScansRunTable/ScansRunTable.tsx @@ -1,62 +1,51 @@ import React, { Component } from 'react'; -import { - Table, - TableBody, - TableVariant, - ICell, - TableHeader -} from '@patternfly/react-table'; +import { Table, TableBody, TableVariant, ICell, TableHeader } from '@patternfly/react-table'; import { formatDate } from '../../../Utilities/formatValue'; import { ScanRunModel } from '../../../models'; export interface Props { - scanRuns: ScanRunModel[]; + scanRuns: ScanRunModel[]; } interface State { - columns: Array; + columns: Array; } class ScansRunTable extends Component { - - constructor(props: Props) { - super(props); - this.state = { - columns: [ - 'Target', - 'Type', - 'Date' - ] - }; - } - - public render() { - const { columns } = this.state; - const { scanRuns } = this.props; - - const rows = scanRuns.map((element) => { - return [ - element.target, - element.smartStateEnabled ? 'Virt Platform + SmartState' : 'Virt Platform', - formatDate(new Date(element.date), false) - ]; - }); - - return ( - - - - -
-
- ); - } + constructor(props: Props) { + super(props); + this.state = { + columns: ['Target', 'Type', 'Date'], + }; + } + + public render() { + const { columns } = this.state; + const { scanRuns } = this.props; + + const rows = scanRuns.map((element) => { + return [ + element.target, + element.smartStateEnabled ? 'Virt Platform + SmartState' : 'Virt Platform', + formatDate(new Date(element.date), false), + ]; + }); + + return ( + + + + +
+
+ ); + } } export default ScansRunTable; diff --git a/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.scss b/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.scss index 7eba752f..29a15c62 100644 --- a/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.scss +++ b/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.scss @@ -1,3 +1,3 @@ .summary-table-footer { - border-bottom: 0 !important; -} \ No newline at end of file + border-bottom: 0 !important; +} diff --git a/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.tsx b/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.tsx index de960683..4717fa75 100644 --- a/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.tsx +++ b/src/PresentationalComponents/Reports/SummaryTable/SummaryTable.tsx @@ -1,101 +1,86 @@ import React, { Component } from 'react'; -import { - Table, - TableBody, - TableVariant, - ICell, - TableHeader -} from '@patternfly/react-table'; +import { Table, TableBody, TableVariant, ICell, TableHeader } from '@patternfly/react-table'; import { formatNumber } from '../../../Utilities/formatValue'; import { Summary } from '../../../models'; import './SummaryTable.scss'; import { isNullOrUndefined } from '../../../Utilities/formUtils'; interface Props { - summary: Summary[]; + summary: Summary[]; } interface State { - columns: Array; + columns: Array; } class SummaryTable extends Component { + constructor(props: Props) { + super(props); + this.state = { + columns: ['Provider', 'Product', 'Version', 'Hosts', 'Sockets', 'Clusters', 'VMs'], + }; + } - constructor(props: Props) { - super(props); - this.state = { - columns: [ - 'Provider', - 'Product', - 'Version', - 'Hosts', - 'Sockets', - 'Clusters', - 'VMs' - ] - }; - } + public render() { + const { columns } = this.state; + const { summary } = this.props; - public render() { - const { columns } = this.state; - const { summary } = this.props; + let totalHosts = 0; + let totalSockets = 0; + let totalClusters = 0; + let totalVms = 0; - let totalHosts = 0; - let totalSockets = 0; - let totalClusters = 0; - let totalVms = 0; + const rows = summary.map((element) => { + totalHosts += element.hosts || 0; + totalSockets += element.sockets || 0; + totalClusters += element.clusters || 0; + totalVms += element.vms || 0; - const rows = summary.map((element) => { - totalHosts += (element.hosts || 0); - totalSockets += (element.sockets || 0); - totalClusters += (element.clusters || 0); - totalVms += (element.vms || 0); + return [ + !isNullOrUndefined(element.provider) ? element.provider : '', + !isNullOrUndefined(element.product) ? element.product : '', + !isNullOrUndefined(element.version) ? element.version : '', + !isNullOrUndefined(element.hosts) ? formatNumber(element.hosts, 0) : '', + !isNullOrUndefined(element.sockets) ? formatNumber(element.sockets, 0) : '', + !isNullOrUndefined(element.clusters) ? formatNumber(element.clusters, 0) : '', + !isNullOrUndefined(element.vms) ? formatNumber(element.vms, 0) : '', + ]; + }); - return [ - !isNullOrUndefined(element.provider) ? element.provider : '', - !isNullOrUndefined(element.product) ? element.product : '', - !isNullOrUndefined(element.version) ? element.version : '', - !isNullOrUndefined(element.hosts) ? formatNumber(element.hosts, 0) : '', - !isNullOrUndefined(element.sockets) ? formatNumber(element.sockets, 0) : '', - !isNullOrUndefined(element.clusters) ? formatNumber(element.clusters, 0) : '', - !isNullOrUndefined(element.vms) ? formatNumber(element.vms, 0) : '', - ]; - }); - - return ( - - - - - - - - - - - - - -
- Total - - { formatNumber(totalHosts, 0) } - - { formatNumber(totalSockets, 0) } - - { formatNumber(totalClusters, 0) } - - { formatNumber(totalVms, 0) } -
-
- ); - } + return ( + + + + + + + + + + + + + +
+ Total + + {formatNumber(totalHosts, 0)} + + {formatNumber(totalSockets, 0)} + + {formatNumber(totalClusters, 0)} + + {formatNumber(totalVms, 0)} +
+
+ ); + } } export default SummaryTable; diff --git a/src/PresentationalComponents/ReportsPage/ReportsPage.test.tsx b/src/PresentationalComponents/ReportsPage/ReportsPage.test.tsx index accbff35..6ba57f56 100644 --- a/src/PresentationalComponents/ReportsPage/ReportsPage.test.tsx +++ b/src/PresentationalComponents/ReportsPage/ReportsPage.test.tsx @@ -1,16 +1,10 @@ -import React from "react"; -import { shallow } from "enzyme"; -import ReportsPage from "./ReportsPage"; +import React from 'react'; +import { shallow } from 'enzyme'; +import ReportsPage from './ReportsPage'; -describe("ReportPage", () => { - - it("expect to render", () => { - const wrapper = shallow( - - children - - ); +describe('ReportPage', () => { + it('expect to render', () => { + const wrapper = shallow(children); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/PresentationalComponents/ReportsPage/ReportsPage.tsx b/src/PresentationalComponents/ReportsPage/ReportsPage.tsx index 499ead0d..168ce2b9 100644 --- a/src/PresentationalComponents/ReportsPage/ReportsPage.tsx +++ b/src/PresentationalComponents/ReportsPage/ReportsPage.tsx @@ -1,39 +1,31 @@ import React, { Fragment, Component } from 'react'; import { - PageHeader, - PageHeaderTitle + PageHeader, + PageHeaderTitle, } from '@redhat-cloud-services/frontend-components/components/PageHeader'; -import { - Main -} from '@redhat-cloud-services/frontend-components/components/Main'; +import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; interface Props { - mainStyle?: any; -}; - -interface State { + mainStyle?: any; } -class ReportsPage extends Component { +class ReportsPage extends Component { + constructor(props: Props) { + super(props); + } - constructor(props: Props) { - super(props); - } + public render() { + const { children } = this.props; - public render() { - const { children } = this.props; - - return ( - - - - -
- { children } -
-
- ); - } -}; + return ( + + + + +
{children}
+
+ ); + } +} export default ReportsPage; diff --git a/src/PresentationalComponents/SolidCard/SolidCard.test.tsx b/src/PresentationalComponents/SolidCard/SolidCard.test.tsx index e2ede4fc..89e59072 100644 --- a/src/PresentationalComponents/SolidCard/SolidCard.test.tsx +++ b/src/PresentationalComponents/SolidCard/SolidCard.test.tsx @@ -3,13 +3,15 @@ import { shallow } from 'enzyme'; import { SolidCard } from './SolidCard'; describe('SolidCard', () => { - it('expect to render', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render with setted width', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render with setted width', () => { + const wrapper = shallow( + + ); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/PresentationalComponents/SolidCard/SolidCard.tsx b/src/PresentationalComponents/SolidCard/SolidCard.tsx index 45c746f9..62f1b747 100644 --- a/src/PresentationalComponents/SolidCard/SolidCard.tsx +++ b/src/PresentationalComponents/SolidCard/SolidCard.tsx @@ -2,28 +2,26 @@ import React from 'react'; import { Card, CardBody } from '@patternfly/react-core'; interface Props { - title: string; - description?: string; - width?: number; + title: string; + description?: string; + width?: number; } -interface State {} +export class SolidCard extends React.Component { + constructor(props: Props) { + super(props); + } -export class SolidCard extends React.Component { - constructor(props: Props) { - super(props); - } + public render() { + const { title, description, width } = this.props; - public render() { - const { title, description, width } = this.props; - - return ( - - -

{title}

- {description &&

{description}

} -
-
- ); - } + return ( + + +

{title}

+ {description &&

{description}

} +
+
+ ); + } } diff --git a/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.test.tsx b/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.test.tsx index 0fc7d1aa..63a244d4 100644 --- a/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.test.tsx +++ b/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.test.tsx @@ -1,75 +1,79 @@ import React from 'react'; import { shallow } from 'enzyme'; import { ApplicationPlatformsCard } from './ApplicationPlatformsCard'; -import { ReportWorkloadSummary } from 'src/models'; +import { ReportWorkloadSummary } from 'models'; const BasicReportWorkloadSummary: ReportWorkloadSummary = { - complexityModel: { - easy: 1, - hard: 2, - medium: 3, - unknown: 4, - unsupported: 5 - }, - recommendedTargetsIMSModel: { - ocp: 10, - osp: 20, - rhel: 30, - rhv: 40, - total: 100, - openjdk: 5, - jbosseap: 1 - }, - scanRunModels: [], - summaryModels: [], - workloadsDetectedOSTypeModels: [], - javaRuntimes: [], - applicationPlatforms: [], - osInformation: [] + complexityModel: { + easy: 1, + hard: 2, + medium: 3, + unknown: 4, + unsupported: 5, + }, + recommendedTargetsIMSModel: { + ocp: 10, + osp: 20, + rhel: 30, + rhv: 40, + total: 100, + openjdk: 5, + jbosseap: 1, + }, + scanRunModels: [], + summaryModels: [], + workloadsDetectedOSTypeModels: [], + javaRuntimes: [], + applicationPlatforms: [], + osInformation: [], }; describe('ApplicationPlatformsCard', () => { - it('expect to render', () => { - const reportWorkloadSummary: ReportWorkloadSummary = { - ...BasicReportWorkloadSummary, - applicationPlatforms: [ - { - name: 'Application1', - version: null, - total: 10, - priority: 100 - }, - { - name: 'Application2', - version: null, - total: 20, - priority: 100 - }, - { - name: 'Application2', - version: null, - total: 15, - priority: 100 - } - ] - }; + it('expect to render', () => { + const reportWorkloadSummary: ReportWorkloadSummary = { + ...BasicReportWorkloadSummary, + applicationPlatforms: [ + { + name: 'Application1', + version: null, + total: 10, + priority: 100, + }, + { + name: 'Application2', + version: null, + total: 20, + priority: 100, + }, + { + name: 'Application2', + version: null, + total: 15, + priority: 100, + }, + ], + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow( + + ); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render empty card when undefined reportWorkloadSummary', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render empty card when undefined reportWorkloadSummary', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render empty card when no java runtimes', () => { - const reportWorkloadSummary: ReportWorkloadSummary = { - ...BasicReportWorkloadSummary, - javaRuntimes: [] - }; + it('expect to render empty card when no java runtimes', () => { + const reportWorkloadSummary: ReportWorkloadSummary = { + ...BasicReportWorkloadSummary, + javaRuntimes: [], + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow( + + ); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.tsx b/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.tsx index c34decb0..8238c009 100644 --- a/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.tsx +++ b/src/PresentationalComponents/WorkladSummary/ApplicationPlatformsCard/ApplicationPlatformsCard.tsx @@ -10,92 +10,97 @@ import { EmptyCard } from '../../EmptyCard'; import { SolidCard } from '../../../PresentationalComponents/SolidCard'; interface Props { - reportWorkloadSummary: ReportWorkloadSummary | null; + reportWorkloadSummary: ReportWorkloadSummary | null; } export const ApplicationPlatformsCard: React.FC = ({ reportWorkloadSummary }) => { - const title = ( - - Application server platform information  - - See the Workload migration inventory for details}> - - - - - ); + const title = ( + + Application server platform information  + + See the Workload migration inventory for details} + > + + + + + ); - if ( - !reportWorkloadSummary || - !reportWorkloadSummary.applicationPlatforms || - reportWorkloadSummary.applicationPlatforms.length === 0 - ) { - return ( - - ); - } + if ( + !reportWorkloadSummary || + !reportWorkloadSummary.applicationPlatforms || + reportWorkloadSummary.applicationPlatforms.length === 0 + ) { + return ( + + ); + } - const applicationPlatforms = reportWorkloadSummary.applicationPlatforms; + const applicationPlatforms = reportWorkloadSummary.applicationPlatforms; - const orderedApplicationPlatforms = applicationPlatforms.sort( - (a: ApplicationPlatformModel, b: ApplicationPlatformModel) => { - return a.name.localeCompare(b.name); - } - ); + const orderedApplicationPlatforms = applicationPlatforms.sort( + (a: ApplicationPlatformModel, b: ApplicationPlatformModel) => { + return a.name.localeCompare(b.name); + } + ); - // - const pieValues = orderedApplicationPlatforms.map(element => element.total); + // + const pieValues = orderedApplicationPlatforms.map((element) => element.total); - const total = pieValues.reduce((a: number, b: number) => a + b, 0); - const percentages = pieValues.map((val: number) => val / total); + const total = pieValues.reduce((a: number, b: number) => a + b, 0); + const percentages = pieValues.map((val: number) => val / total); - const chartProps = { - title: formatNumber(total, 0), - subTitle: 'Total' - }; + const chartProps = { + title: formatNumber(total, 0), + subTitle: 'Total', + }; - const chartData: FancyChartDonutData[] = orderedApplicationPlatforms.map((element, index: number) => ({ - label: `${element.name}`, - value: percentages[index], - extraData: pieValues[index] - })); + const chartData: FancyChartDonutData[] = orderedApplicationPlatforms.map( + (element, index: number) => ({ + label: `${element.name}`, + value: percentages[index], + extraData: pieValues[index], + }) + ); - const tickFormat = (label: string, value: number, data: any) => { - return `${label}: ${formatNumber(data, 0)}`; - }; - const tooltipFormat = ({ datum }) => - `${datum.x}: ${formatPercentage(datum.y, 2)} \n Total: ${formatNumber(datum.extraData, 0)}`; + const tickFormat = (label: string, value: number, data: any) => { + return `${label}: ${formatNumber(data, 0)}`; + }; + const tooltipFormat = ({ datum }) => + `${datum.x}: ${formatPercentage(datum.y, 2)} \n Total: ${formatNumber(datum.extraData, 0)}`; - return ( - - - - - - - - - - - - - - - ); + return ( + + + + + + + + + + + + + + + ); }; diff --git a/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.test.tsx b/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.test.tsx index 2801c47f..13c30574 100644 --- a/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.test.tsx +++ b/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.test.tsx @@ -1,75 +1,75 @@ import React from 'react'; import { shallow } from 'enzyme'; import { JavaRuntimesCard } from './JavaRuntimesCard'; -import { ReportWorkloadSummary } from 'src/models'; +import { ReportWorkloadSummary } from 'models'; const BasicReportWorkloadSummary: ReportWorkloadSummary = { - complexityModel: { - easy: 1, - hard: 2, - medium: 3, - unknown: 4, - unsupported: 5 - }, - recommendedTargetsIMSModel: { - ocp: 10, - osp: 20, - rhel: 30, - rhv: 40, - total: 100, - openjdk: 8, - jbosseap: 9 - }, - scanRunModels: [], - summaryModels: [], - workloadsDetectedOSTypeModels: [], - javaRuntimes: [], - applicationPlatforms: [], - osInformation: [] + complexityModel: { + easy: 1, + hard: 2, + medium: 3, + unknown: 4, + unsupported: 5, + }, + recommendedTargetsIMSModel: { + ocp: 10, + osp: 20, + rhel: 30, + rhv: 40, + total: 100, + openjdk: 8, + jbosseap: 9, + }, + scanRunModels: [], + summaryModels: [], + workloadsDetectedOSTypeModels: [], + javaRuntimes: [], + applicationPlatforms: [], + osInformation: [], }; describe('JavaRuntimesCard', () => { - it('expect to render', () => { - const reportWorkloadSummary: ReportWorkloadSummary = { - ...BasicReportWorkloadSummary, - javaRuntimes: [ - { - vendor: 'VendorA', - version: '8', - total: 10, - priority: 100 - }, - { - vendor: 'VendorB', - version: '11', - total: 20, - priority: null - }, - { - vendor: 'VendorB', - version: '8', - total: 15, - priority: 10 - } - ] - }; + it('expect to render', () => { + const reportWorkloadSummary: ReportWorkloadSummary = { + ...BasicReportWorkloadSummary, + javaRuntimes: [ + { + vendor: 'VendorA', + version: '8', + total: 10, + priority: 100, + }, + { + vendor: 'VendorB', + version: '11', + total: 20, + priority: null, + }, + { + vendor: 'VendorB', + version: '8', + total: 15, + priority: 10, + }, + ], + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render empty card when undefined reportWorkloadSummary', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render empty card when undefined reportWorkloadSummary', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render empty card when no java runtimes', () => { - const reportWorkloadSummary: ReportWorkloadSummary = { - ...BasicReportWorkloadSummary, - javaRuntimes: [] - }; + it('expect to render empty card when no java runtimes', () => { + const reportWorkloadSummary: ReportWorkloadSummary = { + ...BasicReportWorkloadSummary, + javaRuntimes: [], + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.tsx b/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.tsx index 5194554f..b192e648 100644 --- a/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.tsx +++ b/src/PresentationalComponents/WorkladSummary/JavaRuntimesCard/JavaRuntimesCard.tsx @@ -10,92 +10,95 @@ import { EmptyCard } from '../../EmptyCard'; import { SolidCard } from '../../../PresentationalComponents/SolidCard'; interface Props { - reportWorkloadSummary: ReportWorkloadSummary | null; + reportWorkloadSummary: ReportWorkloadSummary | null; } export const JavaRuntimesCard: React.FC = ({ reportWorkloadSummary }) => { - const title = ( - - Oracle Java runtime information  - - See the Workload migration inventory for details}> - - - - - ); + const title = ( + + Oracle Java runtime information  + + See the Workload migration inventory for details} + > + + + + + ); - if ( - !reportWorkloadSummary || - !reportWorkloadSummary.javaRuntimes || - reportWorkloadSummary.javaRuntimes.length === 0 - ) { - return ( - - ); - } + if ( + !reportWorkloadSummary || + !reportWorkloadSummary.javaRuntimes || + reportWorkloadSummary.javaRuntimes.length === 0 + ) { + return ( + + ); + } - const javaRuntimes = reportWorkloadSummary.javaRuntimes; + const javaRuntimes = reportWorkloadSummary.javaRuntimes; - const orderedJavaRuntimes = javaRuntimes.sort((a: JavaRuntimeModel, b: JavaRuntimeModel) => { - if (a.vendor === b.vendor) { - return Number(a.version) - Number(b.version); - } - return a.vendor.localeCompare(b.vendor); - }); + const orderedJavaRuntimes = javaRuntimes.sort((a: JavaRuntimeModel, b: JavaRuntimeModel) => { + if (a.vendor === b.vendor) { + return Number(a.version) - Number(b.version); + } + return a.vendor.localeCompare(b.vendor); + }); - // - const pieValues = orderedJavaRuntimes.map(element => element.total); + // + const pieValues = orderedJavaRuntimes.map((element) => element.total); - const total = pieValues.reduce((a: number, b: number) => a + b, 0); - const percentages = pieValues.map((val: number) => val / total); + const total = pieValues.reduce((a: number, b: number) => a + b, 0); + const percentages = pieValues.map((val: number) => val / total); - const chartProps = { - title: formatNumber(total, 0), - subTitle: 'Total' - }; + const chartProps = { + title: formatNumber(total, 0), + subTitle: 'Total', + }; - const chartData: FancyChartDonutData[] = orderedJavaRuntimes.map((element, index: number) => ({ - label: `${element.vendor} JDK ${element.version}`, - value: percentages[index], - extraData: pieValues[index] - })); + const chartData: FancyChartDonutData[] = orderedJavaRuntimes.map((element, index: number) => ({ + label: `${element.vendor} JDK ${element.version}`, + value: percentages[index], + extraData: pieValues[index], + })); - const tickFormat = (label: string, value: number, data: any) => { - return `${label}: ${formatNumber(data, 0)}`; - }; - const tooltipFormat = ({ datum }) => - `${datum.x}: ${formatPercentage(datum.y, 2)} \n Total: ${formatNumber(datum.extraData, 0)}`; + const tickFormat = (label: string, value: number, data: any) => { + return `${label}: ${formatNumber(data, 0)}`; + }; + const tooltipFormat = ({ datum }) => + `${datum.x}: ${formatPercentage(datum.y, 2)} \n Total: ${formatNumber(datum.extraData, 0)}`; - return ( - - - - - - - - - - - - - - - ); + return ( + + + + + + + + + + + + + + + ); }; diff --git a/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.test.tsx b/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.test.tsx index c4a9cced..e0d15943 100644 --- a/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.test.tsx +++ b/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.test.tsx @@ -1,81 +1,81 @@ import React from 'react'; import { shallow } from 'enzyme'; import { OSInformation } from './OSInformation'; -import { ReportWorkloadSummary } from 'src/models'; +import { ReportWorkloadSummary } from 'models'; const BasicReportWorkloadSummary: ReportWorkloadSummary = { - complexityModel: { - easy: 1, - hard: 2, - medium: 3, - unknown: 4, - unsupported: 5 - }, - recommendedTargetsIMSModel: { - ocp: 10, - osp: 20, - rhel: 30, - rhv: 40, - total: 100, - openjdk: 25, - jbosseap: 8 - }, - scanRunModels: [], - summaryModels: [], - workloadsDetectedOSTypeModels: [], - javaRuntimes: [], - applicationPlatforms: [], - osInformation: [] + complexityModel: { + easy: 1, + hard: 2, + medium: 3, + unknown: 4, + unsupported: 5, + }, + recommendedTargetsIMSModel: { + ocp: 10, + osp: 20, + rhel: 30, + rhv: 40, + total: 100, + openjdk: 25, + jbosseap: 8, + }, + scanRunModels: [], + summaryModels: [], + workloadsDetectedOSTypeModels: [], + javaRuntimes: [], + applicationPlatforms: [], + osInformation: [], }; describe('JavaRuntimesCard', () => { - it('expect to render', () => { - const reportWorkloadSummary: ReportWorkloadSummary = { - ...BasicReportWorkloadSummary, - osInformation: [ - { - osFamily: 'Windows Server', - version: null, - total: 10, - priority: 100 - }, - { - osFamily: 'CentOS', - version: null, - total: 20, - priority: 90 - }, - { - osFamily: 'Ubuntu', - version: null, - total: 20, - priority: 80 - }, - { - osFamily: 'Other', - version: null, - total: 15, - priority: 70 - } - ] - }; + it('expect to render', () => { + const reportWorkloadSummary: ReportWorkloadSummary = { + ...BasicReportWorkloadSummary, + osInformation: [ + { + osFamily: 'Windows Server', + version: null, + total: 10, + priority: 100, + }, + { + osFamily: 'CentOS', + version: null, + total: 20, + priority: 90, + }, + { + osFamily: 'Ubuntu', + version: null, + total: 20, + priority: 80, + }, + { + osFamily: 'Other', + version: null, + total: 15, + priority: 70, + }, + ], + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render empty card when undefined reportWorkloadSummary', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render empty card when undefined reportWorkloadSummary', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render empty card when no java runtimes', () => { - const reportWorkloadSummary: ReportWorkloadSummary = { - ...BasicReportWorkloadSummary, - javaRuntimes: [] - }; + it('expect to render empty card when no java runtimes', () => { + const reportWorkloadSummary: ReportWorkloadSummary = { + ...BasicReportWorkloadSummary, + javaRuntimes: [], + }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.tsx b/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.tsx index 95e26728..094dda12 100644 --- a/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.tsx +++ b/src/PresentationalComponents/WorkladSummary/OSInformation/OSInformation.tsx @@ -11,100 +11,105 @@ import { EmptyCard } from '../../EmptyCard'; import { SolidCard } from '../../SolidCard'; interface Props { - reportWorkloadSummary: ReportWorkloadSummary | null; + reportWorkloadSummary: ReportWorkloadSummary | null; } export const OSInformation: React.FC = ({ reportWorkloadSummary }) => { - const title = ( - - Operating system information  - - See the Workload migration inventory for details}> - - - - - ); + const title = ( + + Operating system information  + + See the Workload migration inventory for details} + > + + + + + ); - if ( - !reportWorkloadSummary || - !reportWorkloadSummary.osInformation || - reportWorkloadSummary.osInformation.length === 0 - ) { - return ( - - ); - } + if ( + !reportWorkloadSummary || + !reportWorkloadSummary.osInformation || + reportWorkloadSummary.osInformation.length === 0 + ) { + return ( + + ); + } - const osInformation = reportWorkloadSummary.osInformation; + const osInformation = reportWorkloadSummary.osInformation; - const orderedOsInformation = osInformation.sort((a: OSInformationModel, b: OSInformationModel) => { - if (a.osFamily === b.osFamily) { - return (Number(b.version) || 0) - (Number(a.version) || 0); - } else if (a.priority || b.priority) { - return (b.priority || 0) - (a.priority || 0); - } - return b.osFamily.localeCompare(a.osFamily); - }); + const orderedOsInformation = osInformation.sort( + (a: OSInformationModel, b: OSInformationModel) => { + if (a.osFamily === b.osFamily) { + return (Number(b.version) || 0) - (Number(a.version) || 0); + } else if (a.priority || b.priority) { + return (b.priority || 0) - (a.priority || 0); + } + return b.osFamily.localeCompare(a.osFamily); + } + ); - // - const pieValues = orderedOsInformation.map(element => element.total); + // + const pieValues = orderedOsInformation.map((element) => element.total); - const total = pieValues.reduce((a: number, b: number) => a + b, 0); - const percentages = pieValues.map((val: number) => val / total); + const total = pieValues.reduce((a: number, b: number) => a + b, 0); + const percentages = pieValues.map((val: number) => val / total); - const chartProps = { - title: formatNumber(total, 0), - subTitle: 'Total', - padding: { - bottom: 20, - left: 20, - right: 165, // Adjusted to accommodate legend - top: 20 - } - }; + const chartProps = { + title: formatNumber(total, 0), + subTitle: 'Total', + padding: { + bottom: 20, + left: 20, + right: 165, // Adjusted to accommodate legend + top: 20, + }, + }; - const chartData: FancyChartDonutData[] = orderedOsInformation.map((element, index: number) => ({ - label: `${element.osFamily}`, - value: percentages[index], - extraData: pieValues[index] - })); + const chartData: FancyChartDonutData[] = orderedOsInformation.map((element, index: number) => ({ + label: `${element.osFamily}`, + value: percentages[index], + extraData: pieValues[index], + })); - const tickFormat = (label: string, value: number, data: any) => { - return `${label}: ${formatNumber(data, 0)}`; - }; - const tooltipFormat = ({ datum }) => - `${datum.x}: ${formatPercentage(datum.y, 2)} \n Total: ${formatNumber(datum.extraData, 0)}`; + const tickFormat = (label: string, value: number, data: any) => { + return `${label}: ${formatNumber(data, 0)}`; + }; + const tooltipFormat = ({ datum }) => + `${datum.x}: ${formatPercentage(datum.y, 2)} \n Total: ${formatNumber(datum.extraData, 0)}`; - return ( - - - - - - - - - - - - - - - ); + return ( + + + + + + + + + + + + + + + ); }; diff --git a/src/Routes.js b/src/Routes.js index 90fc4557..e04dcdc1 100644 --- a/src/Routes.js +++ b/src/Routes.js @@ -20,48 +20,48 @@ import UserRoute from './SmartComponents/UserRoute'; * */ const GettingStarted = asyncComponent(() => - import(/* webpackChunkName: "GettingStarted" */ './pages/GettingStarted')); -const Reports = asyncComponent(() => - import(/* webpackChunkName: "Reports" */ './pages/Reports')); + import(/* webpackChunkName: "GettingStarted" */ './pages/GettingStarted') +); +const Reports = asyncComponent(() => import(/* webpackChunkName: "Reports" */ './pages/Reports')); const NoReports = asyncComponent(() => - import(/* webpackChunkName: "NoReports" */ './pages/NoReports')); + import(/* webpackChunkName: "NoReports" */ './pages/NoReports') +); const ReportsUpload = asyncComponent(() => - import(/* webpackChunkName: "ReportsUpload" */ './pages/ReportsUpload')); + import(/* webpackChunkName: "ReportsUpload" */ './pages/ReportsUpload') +); const ReportView = asyncComponent(() => - import(/* webpackChunkName: "ReportView" */ './pages/ReportView')); + import(/* webpackChunkName: "ReportView" */ './pages/ReportView') +); const ErrorPage = asyncComponent(() => - import(/* webpackChunkName: "ErrorPage" */ './pages/ErrorPage')); + import(/* webpackChunkName: "ErrorPage" */ './pages/ErrorPage') +); const paths = { - gettingStarted: '/getting-started', - reports: '/reports', - noReports: '/no-reports', - reportsUpload: '/reports/upload', - reportView: '/reports/:reportId', - error: '/error' -}; - -type Props = { - childProps: any + gettingStarted: '/getting-started', + reports: '/reports', + noReports: '/no-reports', + reportsUpload: '/reports/upload', + reportView: '/reports/:reportId', + error: '/error', }; const InsightsRoute = ({ component: Component, rootClass, skipLoadUser, ...rest }) => { - const root = document.getElementById('root'); - root.removeAttribute('class'); - root.classList.add(`page__${rootClass}`, 'pf-c-page__main'); - root.setAttribute('role', 'main'); + const root = document.getElementById('root'); + root.removeAttribute('class'); + root.classList.add(`page__${rootClass}`, 'pf-c-page__main'); + root.setAttribute('role', 'main'); - if (skipLoadUser) { - return (); - } else { - return (); - } + if (skipLoadUser) { + return ; + } else { + return ; + } }; InsightsRoute.propTypes = { - component: PropTypes.func, - rootClass: PropTypes.string, - skipLoadUser: PropTypes.bool + component: PropTypes.func, + rootClass: PropTypes.string, + skipLoadUser: PropTypes.bool, }; /** @@ -72,20 +72,38 @@ InsightsRoute.propTypes = { * path - https://prod.foo.redhat.com:1337/insights/advisor/rules * component - component to be rendered when a route has been chosen. */ -export const Routes = (props: Props) => { - const path = props.childProps.location.pathname; +export const Routes = (props) => { + const path = props.childProps.location.pathname; - return ( - - - - - - - + return ( + + + + + + + - { /* Finally, catch all unmatched routes */ } - some(paths, p => p === path) ? null : () }/> - - ); + {/* Finally, catch all unmatched routes */} + + some(paths, (p) => p === path) ? null : + } + /> + + ); }; diff --git a/src/SmartComponents/DeleteDialog/DeleteDialog.scss b/src/SmartComponents/DeleteDialog/DeleteDialog.scss index a6a21651..cf1646a9 100644 --- a/src/SmartComponents/DeleteDialog/DeleteDialog.scss +++ b/src/SmartComponents/DeleteDialog/DeleteDialog.scss @@ -1,3 +1,3 @@ .pf-c-modal-box__footer > .pf-c-button:first-of-type { - margin-left: unset !important; -} \ No newline at end of file + margin-left: unset !important; +} diff --git a/src/SmartComponents/DeleteDialog/DeleteDialog.tsx b/src/SmartComponents/DeleteDialog/DeleteDialog.tsx index 71bfb196..e1f8716f 100644 --- a/src/SmartComponents/DeleteDialog/DeleteDialog.tsx +++ b/src/SmartComponents/DeleteDialog/DeleteDialog.tsx @@ -12,58 +12,46 @@ interface Props { type: string; } -interface State { } - -class DeleteDialogBase extends React.Component { - - constructor(props: Props) { - super(props); - } - - public render() { - const { - type, - name, - onDelete, - onCancel, - isOpen, - isProcessing, - isError - } = this.props; - - return ( - - Delete { `${type}` } - , - - ] } - > - { isError - ? `Ops! There was a problem while deleting the ${type}.` - : `Are you sure you want to delete this ${type}? This action will remove any data related to this ${type} permanently.` } - - ); - } - +class DeleteDialogBase extends React.Component { + constructor(props: Props) { + super(props); + } + + public render() { + const { type, name, onDelete, onCancel, isOpen, isProcessing, isError } = this.props; + + return ( + + Delete {`${type}`} + , + , + ]} + > + {isError + ? `Ops! There was a problem while deleting the ${type}.` + : `Are you sure you want to delete this ${type}? This action will remove any data related to this ${type} permanently.`} + + ); + } } export default DeleteDialogBase; diff --git a/src/SmartComponents/DeleteDialog/index.tsx b/src/SmartComponents/DeleteDialog/index.tsx index 4becffe4..2e730db4 100644 --- a/src/SmartComponents/DeleteDialog/index.tsx +++ b/src/SmartComponents/DeleteDialog/index.tsx @@ -3,29 +3,20 @@ import { GlobalState } from '../../models/state'; import DeleteDialogBase from './DeleteDialog'; const mapStateToProps = (state: GlobalState) => { - const { - dialogDeleteState: { - isOpen, - isProcessing, - isError, - name, - type, - onDelete, - onCancel - } - } = state; - return { - isOpen, - isProcessing, - isError, - name, - type, - onDelete, - onCancel - }; + const { + dialogDeleteState: { isOpen, isProcessing, isError, name, type, onDelete, onCancel }, + } = state; + return { + isOpen, + isProcessing, + isError, + name, + type, + onDelete, + onCancel, + }; }; -const mapDispatchToProps = { -}; +const mapDispatchToProps = {}; export default connect(mapStateToProps, mapDispatchToProps)(DeleteDialogBase); diff --git a/src/SmartComponents/Reports/FlagsTable/FlagsTable.scss b/src/SmartComponents/Reports/FlagsTable/FlagsTable.scss index a90f92b3..9da3be30 100644 --- a/src/SmartComponents/Reports/FlagsTable/FlagsTable.scss +++ b/src/SmartComponents/Reports/FlagsTable/FlagsTable.scss @@ -1,5 +1,5 @@ .flags-table-footer { - height: 1px; - border-top: var(--pf-c-table--BorderWidth) solid var(--pf-c-table--BorderColor); - border-bottom: 0 !important; -} \ No newline at end of file + height: 1px; + border-top: var(--pf-c-table--BorderWidth) solid var(--pf-c-table--BorderColor); + border-bottom: 0 !important; +} diff --git a/src/SmartComponents/Reports/FlagsTable/FlagsTable.test.tsx b/src/SmartComponents/Reports/FlagsTable/FlagsTable.test.tsx index 1b1f9296..3d994466 100644 --- a/src/SmartComponents/Reports/FlagsTable/FlagsTable.test.tsx +++ b/src/SmartComponents/Reports/FlagsTable/FlagsTable.test.tsx @@ -3,113 +3,113 @@ import { shallow } from 'enzyme'; import { FlagsTable, FlagsTableProps } from './FlagsTable'; describe('FlagsTable', () => { - it('should render error', () => { - // Given - const props: FlagsTableProps = { - reportId: 1, - - // stateToProps - reportFlags: { total: 0, items: [] }, - reportFlagsFetchStatus: { error: 'Error fetching data', status: 'complete' }, - - allFlags: [], - allFlagsFetchStatus: { error: null, status: 'none' }, - - // dispatchToProps - fetchReportFlags: jest.fn(), - fetchAllFlagAssessments: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); - - it('should render skeleton', () => { - // Given - const props: FlagsTableProps = { - reportId: 1, - - // stateToProps - reportFlags: { total: 0, items: [] }, - reportFlagsFetchStatus: { error: null, status: 'inProgress' }, - - allFlags: [], - allFlagsFetchStatus: { error: null, status: 'none' }, - - // dispatchToProps - fetchReportFlags: jest.fn(), - fetchAllFlagAssessments: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); - - it('should render empty result table', () => { - // Given - const props: FlagsTableProps = { - reportId: 1, - - // stateToProps - reportFlags: { - total: 0, - items: [] - }, - reportFlagsFetchStatus: { error: null, status: 'complete' }, - - allFlags: [], - allFlagsFetchStatus: { error: null, status: 'none' }, - - // dispatchToProps - fetchReportFlags: jest.fn(), - fetchAllFlagAssessments: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); - - it('should render result table', () => { - // Given - const props: FlagsTableProps = { - reportId: 1, - - // stateToProps - reportFlags: { - total: 1, - items: [ - { - workload: 'workload', - flag: 'flag', - osName: 'osName', - clusters: 1, - vms: 2 - } - ] - }, - reportFlagsFetchStatus: { error: null, status: 'complete' }, - - allFlags: [], - allFlagsFetchStatus: { error: null, status: 'none' }, - - // dispatchToProps - fetchReportFlags: jest.fn(), - fetchAllFlagAssessments: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); + it('should render error', () => { + // Given + const props: FlagsTableProps = { + reportId: 1, + + // stateToProps + reportFlags: { total: 0, items: [] }, + reportFlagsFetchStatus: { error: 'Error fetching data', status: 'complete' }, + + allFlags: [], + allFlagsFetchStatus: { error: null, status: 'none' }, + + // dispatchToProps + fetchReportFlags: jest.fn(), + fetchAllFlagAssessments: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); + + it('should render skeleton', () => { + // Given + const props: FlagsTableProps = { + reportId: 1, + + // stateToProps + reportFlags: { total: 0, items: [] }, + reportFlagsFetchStatus: { error: null, status: 'inProgress' }, + + allFlags: [], + allFlagsFetchStatus: { error: null, status: 'none' }, + + // dispatchToProps + fetchReportFlags: jest.fn(), + fetchAllFlagAssessments: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); + + it('should render empty result table', () => { + // Given + const props: FlagsTableProps = { + reportId: 1, + + // stateToProps + reportFlags: { + total: 0, + items: [], + }, + reportFlagsFetchStatus: { error: null, status: 'complete' }, + + allFlags: [], + allFlagsFetchStatus: { error: null, status: 'none' }, + + // dispatchToProps + fetchReportFlags: jest.fn(), + fetchAllFlagAssessments: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); + + it('should render result table', () => { + // Given + const props: FlagsTableProps = { + reportId: 1, + + // stateToProps + reportFlags: { + total: 1, + items: [ + { + workload: 'workload', + flag: 'flag', + osName: 'osName', + clusters: 1, + vms: 2, + }, + ], + }, + reportFlagsFetchStatus: { error: null, status: 'complete' }, + + allFlags: [], + allFlagsFetchStatus: { error: null, status: 'none' }, + + // dispatchToProps + fetchReportFlags: jest.fn(), + fetchAllFlagAssessments: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/SmartComponents/Reports/FlagsTable/FlagsTable.tsx b/src/SmartComponents/Reports/FlagsTable/FlagsTable.tsx index d75dc7e4..8386b61f 100644 --- a/src/SmartComponents/Reports/FlagsTable/FlagsTable.tsx +++ b/src/SmartComponents/Reports/FlagsTable/FlagsTable.tsx @@ -1,28 +1,26 @@ import React from 'react'; import { - Pagination, - Bullseye, - EmptyState, - EmptyStateIcon, - EmptyStateVariant, - Title, - EmptyStateBody + Pagination, + Bullseye, + EmptyState, + EmptyStateIcon, + EmptyStateVariant, + Title, + EmptyStateBody, } from '@patternfly/react-core'; import { - Table, - TableHeader, - TableBody, - ICell, - IRow, - sortable, - ISortBy, - cellWidth, - TableVariant + Table, + TableHeader, + TableBody, + ICell, + IRow, + sortable, + ISortBy, + cellWidth, + TableVariant, } from '@patternfly/react-table'; import { SearchIcon } from '@patternfly/react-icons'; -import { - SkeletonTable -} from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; +import { SkeletonTable } from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; import debounce from 'lodash/debounce'; import { FlagModel, FlagAssessmentModel } from '../../../models'; import { ObjectFetchStatus } from '../../../models/state'; @@ -32,295 +30,290 @@ import { FetchErrorEmptyState } from '../../../PresentationalComponents/FetchErr import './FlagsTable.scss'; interface StateToProps { - reportFlags: { - total: number; - items: FlagModel[] - }; - reportFlagsFetchStatus: ObjectFetchStatus; - allFlags: FlagAssessmentModel[], - allFlagsFetchStatus: ObjectFetchStatus; + reportFlags: { + total: number; + items: FlagModel[]; + }; + reportFlagsFetchStatus: ObjectFetchStatus; + allFlags: FlagAssessmentModel[]; + allFlagsFetchStatus: ObjectFetchStatus; } interface DispatchToProps { - fetchReportFlags: ( - reportId: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined - ) => any; - fetchAllFlagAssessments: () => any; + fetchReportFlags: ( + reportId: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined + ) => any; + fetchAllFlagAssessments: () => any; } export interface FlagsTableProps extends StateToProps, DispatchToProps { - reportId: number; -}; + reportId: number; +} interface Column extends ICell { - key: string; - cellFormatters?: any; - transforms?: any; + key: string; + cellFormatters?: any; + transforms?: any; } interface State { - page: number; - perPage: number; - columns: Column[]; - rows: IRow[]; - sortBy: ISortBy; -}; + page: number; + perPage: number; + columns: Column[]; + rows: IRow[]; + sortBy: ISortBy; +} export class FlagsTable extends React.Component { + public changePage = debounce(() => { + this.refreshData(); + }, 800); + + constructor(props: FlagsTableProps) { + super(props); + this.state = { + page: 1, + perPage: 10, + columns: [ + { + title: 'Flags', + key: 'flag', + props: {}, + transforms: [sortable], + }, + { + title: 'Assessment', + key: 'assessment', + props: {}, + transforms: [], + }, + { + title: 'Operating system', + key: 'osName', + props: {}, + transforms: [cellWidth(15), sortable], + }, + { + title: 'In Clusters', + key: 'clusters', + props: {}, + transforms: [cellWidth(10)], + }, + { + title: 'In VMs', + key: 'vms', + props: {}, + transforms: [cellWidth(10), sortable], + }, + ], + rows: [], + sortBy: {}, + }; + } - public changePage = debounce(() => { - this.refreshData(); - }, 800); - - constructor(props: FlagsTableProps) { - super(props); - this.state = { - page: 1, - perPage: 10, - columns: [ - { - title: 'Flags', - key: 'flag', - props: { }, - transforms: [ sortable ] - }, - { - title: 'Assessment', - key: 'assessment', - props: { }, - transforms: [ ] - }, - { - title: 'Operating system', - key: 'osName', - props: { }, - transforms: [ cellWidth(15), sortable ] - }, - { - title: 'In Clusters', - key: 'clusters', - props: { }, - transforms: [cellWidth(10)] - }, - { - title: 'In VMs', - key: 'vms', - props: { }, - transforms: [ cellWidth(10), sortable ] - } - ], - rows: [], - sortBy: { } - }; - } - - public componentDidMount() { - const { allFlags, fetchAllFlagAssessments } = this.props; - - // Fetch Flag-Assessment column - // Fetch all Flags just once and the reuse the value from redux - if (!allFlags || allFlags.length === 0) { - fetchAllFlagAssessments(); - } - - this.refreshData(); - } + public componentDidMount() { + const { allFlags, fetchAllFlagAssessments } = this.props; - public componentDidUpdate(prevProps: FlagsTableProps) { - if (prevProps.allFlags !== this.props.allFlags) { - this.filtersInRowsAndCells(); - } + // Fetch Flag-Assessment column + // Fetch all Flags just once and the reuse the value from redux + if (!allFlags || allFlags.length === 0) { + fetchAllFlagAssessments(); } - public refreshData = async ( - page: number = this.state.page, - perPage: number = this.state.perPage, - { direction, index } = this.state.sortBy - ) => { - const { reportId, fetchReportFlags } = this.props; - - const column = index !== undefined ? this.state.columns[index].key : undefined; - const orderDirection = direction ? direction : undefined; + this.refreshData(); + } - await fetchReportFlags(reportId, page, perPage, column, orderDirection); - fetchReportFlags(reportId, page, perPage, column, orderDirection); - this.filtersInRowsAndCells(); + public componentDidUpdate(prevProps: FlagsTableProps) { + if (prevProps.allFlags !== this.props.allFlags) { + this.filtersInRowsAndCells(); } + } + + public refreshData = async ( + page: number = this.state.page, + perPage: number = this.state.perPage, + { direction, index } = this.state.sortBy + ) => { + const { reportId, fetchReportFlags } = this.props; + + const column = index !== undefined ? this.state.columns[index].key : undefined; + const orderDirection = direction ? direction : undefined; + + await fetchReportFlags(reportId, page, perPage, column, orderDirection); + fetchReportFlags(reportId, page, perPage, column, orderDirection); + this.filtersInRowsAndCells(); + }; + + public filtersInRowsAndCells = () => { + const { allFlags, reportFlags } = this.props; + const items: FlagModel[] = reportFlags.items ? Object.values(reportFlags.items) : []; + + let rows: IRow[] = []; + if (items.length > 0) { + rows = items.map((row: FlagModel) => { + let flagAssessmentModel = allFlags.find((element: FlagAssessmentModel) => { + return element.flag === row.flag && element.osName === row.osName; + }); - public filtersInRowsAndCells = () => { - const { allFlags, reportFlags } = this.props; - const items: FlagModel[] = reportFlags.items ? Object.values(reportFlags.items) : []; - - let rows: IRow[] = []; - if (items.length > 0) { - rows = items.map((row: FlagModel) => { - let flagAssessmentModel = allFlags.find((element: FlagAssessmentModel) => { - return (element.flag === row.flag && element.osName === row.osName) - }); - - if (!flagAssessmentModel) { - flagAssessmentModel = allFlags.find((element: FlagAssessmentModel) => { - return (element.flag === row.flag && element.osName === '') - }); - } - - return { - cells: [ - flagAssessmentModel ? flagAssessmentModel.flagLabel : row.flag, - flagAssessmentModel ? flagAssessmentModel.assessment : '', - row.osName ? row.osName : '', - !isNullOrUndefined(row.clusters) ? formatNumber(row.clusters, 0) : '', - !isNullOrUndefined(row.vms) ? formatNumber(row.vms, 0) : '' - ] - }; - }); + if (!flagAssessmentModel) { + flagAssessmentModel = allFlags.find((element: FlagAssessmentModel) => { + return element.flag === row.flag && element.osName === ''; + }); } - this.setState({ rows }); + return { + cells: [ + flagAssessmentModel ? flagAssessmentModel.flagLabel : row.flag, + flagAssessmentModel ? flagAssessmentModel.assessment : '', + row.osName ? row.osName : '', + !isNullOrUndefined(row.clusters) ? formatNumber(row.clusters, 0) : '', + !isNullOrUndefined(row.vms) ? formatNumber(row.vms, 0) : '', + ], + }; + }); } - /** - * Allways will reset the page to 1 - */ - public onSort = async (event: any, index: number, direction: any) => { - const page = 1; - const { reportId } = this.props; - const { perPage } = this.state; - - const column = index !== undefined ? this.state.columns[index].key : undefined; - const orderDirection = direction ? direction : undefined; - - await this.props.fetchReportFlags(reportId, page, perPage, column, orderDirection); - this.setState({ - page, - sortBy: { index, direction } - }, () => { - this.filtersInRowsAndCells(); - }); + this.setState({ rows }); + }; + + /** + * Allways will reset the page to 1 + */ + public onSort = async (event: any, index: number, direction: any) => { + const page = 1; + const { reportId } = this.props; + const { perPage } = this.state; + + const column = index !== undefined ? this.state.columns[index].key : undefined; + const orderDirection = direction ? direction : undefined; + + await this.props.fetchReportFlags(reportId, page, perPage, column, orderDirection); + this.setState( + { + page, + sortBy: { index, direction }, + }, + () => { + this.filtersInRowsAndCells(); + } + ); + }; + + public onPageChange = (_event: any, page: number, shouldDebounce: boolean) => { + this.setState({ page }); + if (shouldDebounce) { + this.changePage(); + } else { + this.refreshData(page); } - - public onPageChange = (_event: any, page: number, shouldDebounce: boolean) => { - this.setState({ page }); - if (shouldDebounce) { - this.changePage(); - } else { - this.refreshData(page); - } - }; - - public onSetPage = (event: any, page: number) => { - return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); - }; - - public onPageInput = (event: any, page: number) => { - return this.onPageChange(event, page, true); - }; - - public onPerPageSelect = (_event: any, perPage: number) => { - const page = 1; - - this.setState({ page, perPage }); - this.refreshData(page, perPage); - }; - - public renderPagination = () => { - const { page, perPage } = this.state; - const { total } = this.props.reportFlags; - - return ( - - ); - }; - - public renderResultsTable = () => { - const { rows, columns, sortBy } = this.state; - - return ( - - - - - - - - -
- { this.renderPagination() } -
- ); - }; - - public renderNoResults = () => { - return ( - - - - - No results found - - No results match the search criteria - - - - - ); - }; - - public renderTable = () => { - const { reportFlags } = this.props; - - return ( - - { (reportFlags.total > 0 ? this.renderResultsTable() : this.renderNoResults()) } - - ); - }; - - public renderTableSkeleton = () => { - return ( - - ); - }; - - public renderFetchError = () => { - return ( - - ); - }; - - public render() { - const { reportFlagsFetchStatus } = this.props; - - if (reportFlagsFetchStatus.error) { - return this.renderFetchError(); - } - - const isFetchComplete: boolean = reportFlagsFetchStatus.status === 'complete'; - - return ( - - { isFetchComplete ? this.renderTable() : this.renderTableSkeleton() } - - ); + }; + + public onSetPage = (event: any, page: number) => { + return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); + }; + + public onPageInput = (event: any, page: number) => { + return this.onPageChange(event, page, true); + }; + + public onPerPageSelect = (_event: any, perPage: number) => { + const page = 1; + + this.setState({ page, perPage }); + this.refreshData(page, perPage); + }; + + public renderPagination = () => { + const { page, perPage } = this.state; + const { total } = this.props.reportFlags; + + return ( + + ); + }; + + public renderResultsTable = () => { + const { rows, columns, sortBy } = this.state; + + return ( + + + + + + + + +
{this.renderPagination()}
+ ); + }; + + public renderNoResults = () => { + return ( + + + + + + No results found + + No results match the search criteria + + + + ); + }; + + public renderTable = () => { + const { reportFlags } = this.props; + + return ( + + {reportFlags.total > 0 ? this.renderResultsTable() : this.renderNoResults()} + + ); + }; + + public renderTableSkeleton = () => { + return ; + }; + + public renderFetchError = () => { + return ; + }; + + public render() { + const { reportFlagsFetchStatus } = this.props; + + if (reportFlagsFetchStatus.error) { + return this.renderFetchError(); } + const isFetchComplete: boolean = reportFlagsFetchStatus.status === 'complete'; + + return ( + + {isFetchComplete ? this.renderTable() : this.renderTableSkeleton()} + + ); + } } diff --git a/src/SmartComponents/Reports/FlagsTable/index.tsx b/src/SmartComponents/Reports/FlagsTable/index.tsx index f16e57f2..330312b3 100644 --- a/src/SmartComponents/Reports/FlagsTable/index.tsx +++ b/src/SmartComponents/Reports/FlagsTable/index.tsx @@ -5,30 +5,21 @@ import * as reportActions from '../../../actions/ReportActions'; import * as mappingActions from '../../../actions/MappingsActions'; const mapStateToProps = (state: GlobalState) => { - const { - reportFlags, - reportFlagsFetchStatus - } = state.reportState; - const { - flagAssessment: { - allFlags, - allFlagsFetchStatus - } - } = state.mappingsState; - return { - reportFlags, - reportFlagsFetchStatus, - allFlags, - allFlagsFetchStatus - }; + const { reportFlags, reportFlagsFetchStatus } = state.reportState; + const { + flagAssessment: { allFlags, allFlagsFetchStatus }, + } = state.mappingsState; + return { + reportFlags, + reportFlagsFetchStatus, + allFlags, + allFlagsFetchStatus, + }; }; const mapDispatchToProps = { - fetchReportFlags: reportActions.fetchReportFlags, - fetchAllFlagAssessments: mappingActions.fetchAllFlagAssessments + fetchReportFlags: reportActions.fetchReportFlags, + fetchAllFlagAssessments: mappingActions.fetchAllFlagAssessments, }; -export default connect( - mapStateToProps, - mapDispatchToProps -)(FlagsTable); +export default connect(mapStateToProps, mapDispatchToProps)(FlagsTable); diff --git a/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.scss b/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.scss index c59b5abe..2881c5fc 100644 --- a/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.scss +++ b/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.scss @@ -1,5 +1,5 @@ .workloads-detected-table-footer { - height: 1px; - border-top: var(--pf-c-table--BorderWidth) solid var(--pf-c-table--BorderColor); - border-bottom: 0 !important; -} \ No newline at end of file + height: 1px; + border-top: var(--pf-c-table--BorderWidth) solid var(--pf-c-table--BorderColor); + border-bottom: 0 !important; +} diff --git a/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.test.tsx b/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.test.tsx index b28894f4..cb4ecab1 100644 --- a/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.test.tsx +++ b/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.test.tsx @@ -3,93 +3,93 @@ import { shallow } from 'enzyme'; import { WorkloadsDetectedTable, WorkloadsDetectedTableProps } from './WorkloadsDetectedTable'; describe('WorkloadsDetectedTable', () => { - it('should render error', () => { - // Given - const props: WorkloadsDetectedTableProps = { - reportId: 1, - - // stateToProps - reportWorkloadsDetected: { total: 0, items: [] }, - reportWorkloadsDetectedFetchStatus: { error: 'Error fetching data', status: 'complete' }, - - // dispatchToProps - fetchReportWorkloadsDetected: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); - - it('should render skeleton', () => { - // Given - const props: WorkloadsDetectedTableProps = { - reportId: 1, - - // stateToProps - reportWorkloadsDetected: { total: 0, items: [] }, - reportWorkloadsDetectedFetchStatus: { error: null, status: 'inProgress' }, - - // dispatchToProps - fetchReportWorkloadsDetected: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); - - it('should render empty result table', () => { - // Given - const props: WorkloadsDetectedTableProps = { - reportId: 1, - - // stateToProps - reportWorkloadsDetected: { total: 0, items: [] }, - reportWorkloadsDetectedFetchStatus: { error: null, status: 'complete' }, - - // dispatchToProps - fetchReportWorkloadsDetected: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); - - it('should render result table', () => { - // Given - const props: WorkloadsDetectedTableProps = { - reportId: 1, - - // stateToProps - reportWorkloadsDetected: { - total: 1, - items: [ - { - workload: 'workload', - osName: 'osName', - clusters: 1, - vms: 2 - } - ] - }, - reportWorkloadsDetectedFetchStatus: { error: null, status: 'complete' }, - - // dispatchToProps - fetchReportWorkloadsDetected: jest.fn() - }; - - // When - const wrapper = shallow(); - - // Then - expect(wrapper).toMatchSnapshot(); - }); + it('should render error', () => { + // Given + const props: WorkloadsDetectedTableProps = { + reportId: 1, + + // stateToProps + reportWorkloadsDetected: { total: 0, items: [] }, + reportWorkloadsDetectedFetchStatus: { error: 'Error fetching data', status: 'complete' }, + + // dispatchToProps + fetchReportWorkloadsDetected: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); + + it('should render skeleton', () => { + // Given + const props: WorkloadsDetectedTableProps = { + reportId: 1, + + // stateToProps + reportWorkloadsDetected: { total: 0, items: [] }, + reportWorkloadsDetectedFetchStatus: { error: null, status: 'inProgress' }, + + // dispatchToProps + fetchReportWorkloadsDetected: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); + + it('should render empty result table', () => { + // Given + const props: WorkloadsDetectedTableProps = { + reportId: 1, + + // stateToProps + reportWorkloadsDetected: { total: 0, items: [] }, + reportWorkloadsDetectedFetchStatus: { error: null, status: 'complete' }, + + // dispatchToProps + fetchReportWorkloadsDetected: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); + + it('should render result table', () => { + // Given + const props: WorkloadsDetectedTableProps = { + reportId: 1, + + // stateToProps + reportWorkloadsDetected: { + total: 1, + items: [ + { + workload: 'workload', + osName: 'osName', + clusters: 1, + vms: 2, + }, + ], + }, + reportWorkloadsDetectedFetchStatus: { error: null, status: 'complete' }, + + // dispatchToProps + fetchReportWorkloadsDetected: jest.fn(), + }; + + // When + const wrapper = shallow(); + + // Then + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.tsx b/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.tsx index 6ec170ea..50f67aec 100644 --- a/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.tsx +++ b/src/SmartComponents/Reports/WorkloadsDetectedTable/WorkloadsDetectedTable.tsx @@ -1,28 +1,26 @@ import React from 'react'; import { - Pagination, - Bullseye, - EmptyState, - EmptyStateIcon, - EmptyStateVariant, - Title, - EmptyStateBody + Pagination, + Bullseye, + EmptyState, + EmptyStateIcon, + EmptyStateVariant, + Title, + EmptyStateBody, } from '@patternfly/react-core'; import { - Table, - TableHeader, - TableBody, - ICell, - IRow, - sortable, - ISortBy, - cellWidth, - TableVariant + Table, + TableHeader, + TableBody, + ICell, + IRow, + sortable, + ISortBy, + cellWidth, + TableVariant, } from '@patternfly/react-table'; import { SearchIcon } from '@patternfly/react-icons'; -import { - SkeletonTable -} from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; +import { SkeletonTable } from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; import debounce from 'lodash/debounce'; import { WorkloadModel } from '../../../models'; import { ObjectFetchStatus } from '../../../models/state'; @@ -32,260 +30,256 @@ import { FetchErrorEmptyState } from '../../../PresentationalComponents/FetchErr import './WorkloadsDetectedTable.scss'; interface StateToProps { - reportWorkloadsDetected: { - total: number; - items: WorkloadModel[] - }; - reportWorkloadsDetectedFetchStatus: ObjectFetchStatus; + reportWorkloadsDetected: { + total: number; + items: WorkloadModel[]; + }; + reportWorkloadsDetectedFetchStatus: ObjectFetchStatus; } interface DispatchToProps { - fetchReportWorkloadsDetected: ( - reportId: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined - ) => any; + fetchReportWorkloadsDetected: ( + reportId: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined + ) => any; } export interface WorkloadsDetectedTableProps extends StateToProps, DispatchToProps { - reportId: number; -}; + reportId: number; +} interface Column extends ICell { - key: string; - cellFormatters?: any; - transforms?: any; + key: string; + cellFormatters?: any; + transforms?: any; } interface State { - page: number; - perPage: number; - columns: Column[]; - rows: IRow[]; - sortBy: ISortBy; -}; + page: number; + perPage: number; + columns: Column[]; + rows: IRow[]; + sortBy: ISortBy; +} export class WorkloadsDetectedTable extends React.Component { - - public changePage = debounce(() => { - this.refreshData(); - }, 800); - - constructor(props: WorkloadsDetectedTableProps) { - super(props); - this.state = { - page: 1, - perPage: 10, - columns: [ - { - title: 'Workloads', - key: 'workload', - props: { }, - transforms: [ cellWidth(25), sortable ] - }, - { - title: 'Operating system', - key: 'osName', - props: { }, - transforms: [ cellWidth(25), sortable ] - }, - { - title: 'In Clusters', - key: 'clusters', - props: { }, - transforms: [ cellWidth(25) ] - }, - { - title: 'VMs', - key: 'vms', - props: { }, - transforms: [ cellWidth(25), sortable ] - } - ], - rows: [], - sortBy: { } + public changePage = debounce(() => { + this.refreshData(); + }, 800); + + constructor(props: WorkloadsDetectedTableProps) { + super(props); + this.state = { + page: 1, + perPage: 10, + columns: [ + { + title: 'Workloads', + key: 'workload', + props: {}, + transforms: [cellWidth(25), sortable], + }, + { + title: 'Operating system', + key: 'osName', + props: {}, + transforms: [cellWidth(25), sortable], + }, + { + title: 'In Clusters', + key: 'clusters', + props: {}, + transforms: [cellWidth(25)], + }, + { + title: 'VMs', + key: 'vms', + props: {}, + transforms: [cellWidth(25), sortable], + }, + ], + rows: [], + sortBy: {}, + }; + } + + public componentDidMount() { + this.refreshData(); + } + + public refreshData = async ( + page: number = this.state.page, + perPage: number = this.state.perPage, + { direction, index } = this.state.sortBy + ) => { + const { reportId, fetchReportWorkloadsDetected } = this.props; + + const column = index !== undefined ? this.state.columns[index].key : undefined; + const orderDirection = direction ? direction : undefined; + + await fetchReportWorkloadsDetected(reportId, page, perPage, column, orderDirection); + this.filtersInRowsAndCells(); + }; + + public filtersInRowsAndCells = () => { + const items: WorkloadModel[] = this.props.reportWorkloadsDetected.items + ? Object.values(this.props.reportWorkloadsDetected.items) + : []; + + let rows: IRow[] = []; + if (items.length > 0) { + rows = items.map((row: WorkloadModel) => { + return { + cells: [ + row.workload ? row.workload : '', + row.osName ? row.osName : '', + !isNullOrUndefined(row.clusters) ? formatNumber(row.clusters, 0) : '', + !isNullOrUndefined(row.vms) ? formatNumber(row.vms, 0) : '', + ], }; + }); } - public componentDidMount() { - this.refreshData(); - } - - public refreshData = async ( - page: number = this.state.page, - perPage: number = this.state.perPage, - { direction, index } = this.state.sortBy - ) => { - const { reportId, fetchReportWorkloadsDetected } = this.props; - - const column = index !== undefined ? this.state.columns[index].key : undefined; - const orderDirection = direction ? direction : undefined; - - await fetchReportWorkloadsDetected(reportId, page, perPage, column, orderDirection); + this.setState({ rows }); + }; + + /** + * Allways will reset the page to 1 + */ + public onSort = async (event: any, index: number, direction: any) => { + const page = 1; + const { reportId } = this.props; + const { perPage } = this.state; + + const column = index !== undefined ? this.state.columns[index].key : undefined; + const orderDirection = direction ? direction : undefined; + + await this.props.fetchReportWorkloadsDetected(reportId, page, perPage, column, orderDirection); + this.setState( + { + page, + sortBy: { index, direction }, + }, + () => { this.filtersInRowsAndCells(); + } + ); + }; + + public onPageChange = (_event: any, page: number, shouldDebounce: boolean) => { + this.setState({ page }); + if (shouldDebounce) { + this.changePage(); + } else { + this.refreshData(page); } - - public filtersInRowsAndCells = () => { - const items: WorkloadModel[] = this.props.reportWorkloadsDetected.items - ? Object.values(this.props.reportWorkloadsDetected.items) : []; - - let rows: IRow[] = []; - if (items.length > 0) { - rows = items.map((row: WorkloadModel) => { - return { - cells: [ - row.workload ? row.workload : '', - row.osName ? row.osName : '', - !isNullOrUndefined(row.clusters) ? formatNumber(row.clusters, 0) : '', - !isNullOrUndefined(row.vms) ? formatNumber(row.vms, 0) : '' - ] - }; - }); - } - - this.setState({ rows }); - } - - /** - * Allways will reset the page to 1 - */ - public onSort = async (event: any, index: number, direction: any) => { - const page = 1; - const { reportId } = this.props; - const { perPage } = this.state; - - const column = index !== undefined ? this.state.columns[index].key : undefined; - const orderDirection = direction ? direction : undefined; - - await this.props.fetchReportWorkloadsDetected(reportId, page, perPage, column, orderDirection); - this.setState({ - page, - sortBy: { index, direction } - }, () => { - this.filtersInRowsAndCells(); - }); + }; + + public onSetPage = (event: any, page: number) => { + return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); + }; + + public onPageInput = (event: any, page: number) => { + return this.onPageChange(event, page, true); + }; + + public onPerPageSelect = (_event: any, perPage: number) => { + const page = 1; + + this.setState({ page, perPage }); + this.refreshData(page, perPage); + }; + + public renderPagination = () => { + const { page, perPage } = this.state; + const { total } = this.props.reportWorkloadsDetected; + + return ( + + ); + }; + + public renderResultsTable = () => { + const { rows, columns, sortBy } = this.state; + + return ( + + + + + + + + +
{this.renderPagination()}
+ ); + }; + + public renderNoResults = () => { + return ( + + + + + + No results found + + No results match the search criteria + + + + ); + }; + + public renderTable = () => { + const { reportWorkloadsDetected } = this.props; + + return ( + + {reportWorkloadsDetected.total > 0 ? this.renderResultsTable() : this.renderNoResults()} + + ); + }; + + public renderTableSkeleton = () => { + return ; + }; + + public renderFetchError = () => { + return ; + }; + + public render() { + const { reportWorkloadsDetectedFetchStatus } = this.props; + + if (reportWorkloadsDetectedFetchStatus.error) { + return this.renderFetchError(); } - public onPageChange = (_event: any, page: number, shouldDebounce: boolean) => { - this.setState({ page }); - if (shouldDebounce) { - this.changePage(); - } else { - this.refreshData(page); - } - }; - - public onSetPage = (event: any, page: number) => { - return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); - }; - - public onPageInput = (event: any, page: number) => { - return this.onPageChange(event, page, true); - }; - - public onPerPageSelect = (_event: any, perPage: number) => { - const page = 1; - - this.setState({ page, perPage }); - this.refreshData(page, perPage); - }; - - public renderPagination = () => { - const { page, perPage } = this.state; - const { total } = this.props.reportWorkloadsDetected; - - return ( - - ); - }; - - public renderResultsTable = () => { - const { rows, columns, sortBy } = this.state; - - return ( - - - - - - - - -
- { this.renderPagination() } -
- ); - }; - - public renderNoResults = () => { - return ( - - - - - No results found - - No results match the search criteria - - - - - ); - }; - - public renderTable = () => { - const { reportWorkloadsDetected } = this.props; - - return ( - - { (reportWorkloadsDetected.total > 0 ? this.renderResultsTable() : this.renderNoResults()) } - - ); - }; - - public renderTableSkeleton = () => { - return ( - - ); - }; - - public renderFetchError = () => { - return ( - - ); - }; - - public render() { - const { reportWorkloadsDetectedFetchStatus } = this.props; - - if (reportWorkloadsDetectedFetchStatus.error) { - return this.renderFetchError(); - } - - const isFetchComplete: boolean = reportWorkloadsDetectedFetchStatus.status === 'complete'; - - return ( - - { isFetchComplete ? this.renderTable() : this.renderTableSkeleton() } - - ); - } + const isFetchComplete: boolean = reportWorkloadsDetectedFetchStatus.status === 'complete'; + return ( + + {isFetchComplete ? this.renderTable() : this.renderTableSkeleton()} + + ); + } } diff --git a/src/SmartComponents/Reports/WorkloadsDetectedTable/index.tsx b/src/SmartComponents/Reports/WorkloadsDetectedTable/index.tsx index ec26a10a..1ced4947 100644 --- a/src/SmartComponents/Reports/WorkloadsDetectedTable/index.tsx +++ b/src/SmartComponents/Reports/WorkloadsDetectedTable/index.tsx @@ -4,21 +4,15 @@ import { GlobalState } from '../../../models/state'; import * as reportActions from '../../../actions/ReportActions'; const mapStateToProps = (state: GlobalState) => { - const { - reportWorkloadsDetected, - reportWorkloadsDetectedFetchStatus, - } = state.reportState; - return { - reportWorkloadsDetected, - reportWorkloadsDetectedFetchStatus, - }; + const { reportWorkloadsDetected, reportWorkloadsDetectedFetchStatus } = state.reportState; + return { + reportWorkloadsDetected, + reportWorkloadsDetectedFetchStatus, + }; }; const mapDispatchToProps = { - fetchReportWorkloadsDetected: reportActions.fetchReportWorkloadsDetected + fetchReportWorkloadsDetected: reportActions.fetchReportWorkloadsDetected, }; -export default connect( - mapStateToProps, - mapDispatchToProps, -)(WorkloadsDetectedTable); +export default connect(mapStateToProps, mapDispatchToProps)(WorkloadsDetectedTable); diff --git a/src/SmartComponents/UserRoute/UserRoute.tsx b/src/SmartComponents/UserRoute/UserRoute.tsx index 5db1065d..0379a549 100644 --- a/src/SmartComponents/UserRoute/UserRoute.tsx +++ b/src/SmartComponents/UserRoute/UserRoute.tsx @@ -4,54 +4,49 @@ import { User } from '../../models'; import { ObjectFetchStatus } from '../../models/state'; interface StateToProps { - user: User | null; - userFetchStatus: ObjectFetchStatus; + user: User | null; + userFetchStatus: ObjectFetchStatus; } interface DispatchToProps { - fetchUser: () => any; + fetchUser: () => any; } interface Props extends StateToProps, DispatchToProps { - component: any; + component: any; } -interface State {} - -class UserRoute extends React.Component { - - constructor(props: Props) { - super(props); - } - - public componentDidMount() { - this.props.fetchUser(); - } - - public render() { - const { user, userFetchStatus, component: Component, ...rest } = this.props; - - const redirectToError = () => { - return ( - - ); - }; - const nullComponent = () => { - return null; - }; - - switch (userFetchStatus.status) { - case 'complete': - if (user) { - return ; - } else { - return ; - } - - default: - return ; +class UserRoute extends React.Component { + constructor(props: Props) { + super(props); + } + + public componentDidMount() { + this.props.fetchUser(); + } + + public render() { + const { user, userFetchStatus, component: Component, ...rest } = this.props; + + const redirectToError = () => { + return ; + }; + const nullComponent = () => { + return null; + }; + + switch (userFetchStatus.status) { + case 'complete': + if (user) { + return ; + } else { + return ; } + + default: + return ; } + } } export default UserRoute; diff --git a/src/SmartComponents/UserRoute/index.tsx b/src/SmartComponents/UserRoute/index.tsx index 68189a26..3c5d1989 100644 --- a/src/SmartComponents/UserRoute/index.tsx +++ b/src/SmartComponents/UserRoute/index.tsx @@ -4,20 +4,17 @@ import { GlobalState } from '../../models/state'; import * as userActions from '../../actions/UserActions'; const mapStateToProps = (state: GlobalState) => { - const { - userState: { - user, - userFetchStatus - } - } = state; - return { - user, - userFetchStatus - }; + const { + userState: { user, userFetchStatus }, + } = state; + return { + user, + userFetchStatus, + }; }; const mapDispatchToProps = { - fetchUser: userActions.fetchUser + fetchUser: userActions.fetchUser, }; export default connect(mapStateToProps, mapDispatchToProps)(UserRoute); diff --git a/src/Utilities.scss b/src/Utilities.scss index 37b37624..9b862ed7 100644 --- a/src/Utilities.scss +++ b/src/Utilities.scss @@ -1,3 +1,3 @@ // Sass Imports -@import "~@redhat-cloud-services/frontend-components-utilities/files/Utilities/_all"; +@import '~@redhat-cloud-services/frontend-components-utilities/files/Utilities/_all'; diff --git a/src/Utilities/asyncComponent.js b/src/Utilities/asyncComponent.js index 35a8c5d6..e9cf8e6f 100644 --- a/src/Utilities/asyncComponent.js +++ b/src/Utilities/asyncComponent.js @@ -19,29 +19,29 @@ import React, { Component } from 'react'; * @returns {AsyncComponent} The imported component or can return a loading */ export default function asyncComponent(importComponent) { - class AsyncComponent extends Component { - constructor(props) { - super(props); + class AsyncComponent extends Component { + constructor(props) { + super(props); - this.state = { - component: null - }; - } + this.state = { + component: null, + }; + } - async componentDidMount() { - const { default: component } = await importComponent(); + async componentDidMount() { + const { default: component } = await importComponent(); - this.setState({ - component - }); - } + this.setState({ + component, + }); + } - render() { - const C = this.state.component; + render() { + const C = this.state.component; - return C ? : null; - } + return C ? : null; } + } - return AsyncComponent; + return AsyncComponent; } diff --git a/src/Utilities/extractUtils.test.tsx b/src/Utilities/extractUtils.test.tsx index b04a038e..4840493e 100644 --- a/src/Utilities/extractUtils.test.tsx +++ b/src/Utilities/extractUtils.test.tsx @@ -1,21 +1,21 @@ import { getFilenameWithoutExtensions } from './extractUtils'; describe('Utils', () => { - it('expect to remove .zip extension', () => { - const filename = 'myFilename.zip'; - const filenameWithoutExtension = getFilenameWithoutExtensions(filename); - expect(filenameWithoutExtension).toEqual('myFilename'); - }); + it('expect to remove .zip extension', () => { + const filename = 'myFilename.zip'; + const filenameWithoutExtension = getFilenameWithoutExtensions(filename); + expect(filenameWithoutExtension).toEqual('myFilename'); + }); - it('expect to remove .tar.gz extension', () => { - const filename = 'myFilename.tar.gz'; - const filenameWithoutExtension = getFilenameWithoutExtensions(filename); - expect(filenameWithoutExtension).toEqual('myFilename'); - }); + it('expect to remove .tar.gz extension', () => { + const filename = 'myFilename.tar.gz'; + const filenameWithoutExtension = getFilenameWithoutExtensions(filename); + expect(filenameWithoutExtension).toEqual('myFilename'); + }); - it('expect to remove any extension', () => { - const filename = 'myFilename.extension1.extension2'; - const filenameWithoutExtension = getFilenameWithoutExtensions(filename); - expect(filenameWithoutExtension).toEqual('myFilename'); - }); + it('expect to remove any extension', () => { + const filename = 'myFilename.extension1.extension2'; + const filenameWithoutExtension = getFilenameWithoutExtensions(filename); + expect(filenameWithoutExtension).toEqual('myFilename'); + }); }); diff --git a/src/Utilities/extractUtils.tsx b/src/Utilities/extractUtils.tsx index b181082b..7d4406cb 100644 --- a/src/Utilities/extractUtils.tsx +++ b/src/Utilities/extractUtils.tsx @@ -1,16 +1,16 @@ export const extractFilenameFromContentDispositionHeaderValue = (disposition: string) => { - let filename = ''; - if (disposition && disposition.indexOf('attachment') !== -1) { - const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; - const matches = filenameRegex.exec(disposition); - if (matches != null && matches[1]) { - filename = matches[1].replace(/['"]/g, ''); - } + let filename = ''; + if (disposition && disposition.indexOf('attachment') !== -1) { + const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; + const matches = filenameRegex.exec(disposition); + if (matches != null && matches[1]) { + filename = matches[1].replace(/['"]/g, ''); } + } - return filename; + return filename; }; export const getFilenameWithoutExtensions = (filename: string) => { - return filename.replace(/(\.[^/.]+)+$/, ""); + return filename.replace(/(\.[^/.]+)+$/, ''); }; diff --git a/src/Utilities/formUtils.tsx b/src/Utilities/formUtils.tsx index 16d7bd83..40642a6c 100644 --- a/src/Utilities/formUtils.tsx +++ b/src/Utilities/formUtils.tsx @@ -1,23 +1,23 @@ export const isNullOrUndefined = (...value: any[]): boolean => { - return value.some((element: any) => element === undefined || element === null); + return value.some((element: any) => element === undefined || element === null); }; export const getErrorsFromValidationError = (validationError: any) => { - const FIRST_ERROR = 0; - return validationError.inner.reduce((errors: any, error: any) => { - return { - ...errors, - [error.path]: error.errors[FIRST_ERROR] - }; - }, {}); + const FIRST_ERROR = 0; + return validationError.inner.reduce((errors: any, error: any) => { + return { + ...errors, + [error.path]: error.errors[FIRST_ERROR], + }; + }, {}); }; export const validateForm = (values: any, validateFn: any) => { - const validationSchema = validateFn(values); - try { - validationSchema.validateSync(values, { abortEarly: false }); - return {}; - } catch (error) { - return getErrorsFromValidationError(error); - } + const validationSchema = validateFn(values); + try { + validationSchema.validateSync(values, { abortEarly: false }); + return {}; + } catch (error) { + return getErrorsFromValidationError(error); + } }; diff --git a/src/Utilities/formatValue.js b/src/Utilities/formatValue.js index 6c2ced3f..26663d44 100644 --- a/src/Utilities/formatValue.js +++ b/src/Utilities/formatValue.js @@ -1,94 +1,100 @@ -export const unitLookupKey = unit => { - const lookup = unit ? unit.toLowerCase() : ''; - return lookup; +export const unitLookupKey = (unit) => { + const lookup = unit ? unit.toLowerCase() : ''; + return lookup; }; export const formatCurrency = (value, unit, { fractionDigits = 2 } = {}) => { - let fValue = value; - if (!value) { - fValue = 0; - } - - return fValue.toLocaleString('en', { - style: 'currency', - currency: unit || 'USD', - minimumFractionDigits: fractionDigits, - maximumFractionDigits: fractionDigits - }); + let fValue = value; + if (!value) { + fValue = 0; + } + + return fValue.toLocaleString('en', { + style: 'currency', + currency: unit || 'USD', + minimumFractionDigits: fractionDigits, + maximumFractionDigits: fractionDigits, + }); }; const unknownTypeFormatter = (value, _unit, { fractionDigits } = {}) => { - return value.toFixed(fractionDigits); + return value.toFixed(fractionDigits); }; export const formatUsageGb = (value, _unit, { fractionDigits = 2 } = {}) => { - return value.toFixed(fractionDigits); + return value.toFixed(fractionDigits); }; export const formatUsageHrs = (value, _unit, { fractionDigits } = {}) => { - return value.toFixed(fractionDigits); + return value.toFixed(fractionDigits); }; export const formatValue = (value, unit, options = {}) => { - const lookup = unitLookupKey(unit); - const fValue = value || 0; - - switch (lookup) { - case 'usd': - return formatCurrency(fValue, lookup, options); - case 'gb': - case 'gb-hours': - case 'gb-mo': - return formatUsageGb(fValue, lookup, options); - case 'core-hours': - case 'hrs': - return formatUsageHrs(fValue, lookup, options); - default: - return unknownTypeFormatter(fValue, lookup, options); - } + const lookup = unitLookupKey(unit); + const fValue = value || 0; + + switch (lookup) { + case 'usd': + return formatCurrency(fValue, lookup, options); + case 'gb': + case 'gb-hours': + case 'gb-mo': + return formatUsageGb(fValue, lookup, options); + case 'core-hours': + case 'hrs': + return formatUsageHrs(fValue, lookup, options); + default: + return unknownTypeFormatter(fValue, lookup, options); + } }; export const formatDate = (value, includeTime = true) => { - /*eslint new-cap: 0*/ - const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; - const dateOptions = { timeZone, timeZoneName: 'short', year: 'numeric', month: 'long', day: 'numeric' }; - const timeOptions = { timeZone, timeZoneName: 'short', hour: '2-digit', minute: '2-digit' }; - - let options = dateOptions; - if (includeTime) { - options = Object.assign({}, dateOptions, timeOptions); - } - - return value.toLocaleDateString('en', options); + /*eslint new-cap: 0*/ + const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; + const dateOptions = { + timeZone, + timeZoneName: 'short', + year: 'numeric', + month: 'long', + day: 'numeric', + }; + const timeOptions = { timeZone, timeZoneName: 'short', hour: '2-digit', minute: '2-digit' }; + + let options = dateOptions; + if (includeTime) { + options = Object.assign({}, dateOptions, timeOptions); + } + + return value.toLocaleDateString('en', options); }; export const formatNumber = (value, fractionDigits = 2) => { - return value.toLocaleString('en', { - style: 'decimal', - minimumFractionDigits: fractionDigits, - maximumFractionDigits: fractionDigits - }); + return value.toLocaleString('en', { + style: 'decimal', + minimumFractionDigits: fractionDigits, + maximumFractionDigits: fractionDigits, + }); }; export const formatPercentage = (value, fractionDigits = 2) => { - return value.toLocaleString('en', { - style: 'percent', - minimumFractionDigits: fractionDigits, - maximumFractionDigits: fractionDigits - }); + return value.toLocaleString('en', { + style: 'percent', + minimumFractionDigits: fractionDigits, + maximumFractionDigits: fractionDigits, + }); }; export const formatBytes = (bytes, decimals = 2) => { - if (bytes === 0) { - return '0 Bytes'; - } + if (bytes === 0) { + return '0 Bytes'; + } - const k = 1024; - const dm = decimals < 0 ? 0 : decimals; - const sizes = [ 'Bytes', 'KB', 'MB', 'GiB', 'TB', 'PB', 'EB', 'ZB', 'YB' ]; + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ['Bytes', 'KB', 'MB', 'GiB', 'TB', 'PB', 'EB', 'ZB', 'YB']; - const i = Math.floor(Math.log(bytes) / Math.log(k)); + const i = Math.floor(Math.log(bytes) / Math.log(k)); - const s = parseFloat((bytes / Math.pow(k, i)).toFixed(dm)); - return formatNumber(s, decimals) + ' ' + sizes[i]; + const s = parseFloat((bytes / Math.pow(k, i)).toFixed(dm)); + return formatNumber(s, decimals) + ' ' + sizes[i]; }; diff --git a/src/Utilities/getBaseName.js b/src/Utilities/getBaseName.js index 7a364bd9..a529da34 100644 --- a/src/Utilities/getBaseName.js +++ b/src/Utilities/getBaseName.js @@ -1,15 +1,15 @@ function getBaseName(pathname) { - let release = '/'; - const pathName = pathname.split('/'); + let release = '/'; + const pathName = pathname.split('/'); - pathName.shift(); + pathName.shift(); - if (pathName[0] === 'beta') { - pathName.shift(); - release = `/beta/`; - } + if (pathName[0] === 'beta') { + pathName.shift(); + release = `/beta/`; + } - return `${release}${pathName[0]}/${pathName[1]}`; + return `${release}${pathName[0]}/${pathName[1]}`; } export default getBaseName; diff --git a/src/Utilities/unitConvertors.js b/src/Utilities/unitConvertors.js index 07955fe4..d8158c80 100644 --- a/src/Utilities/unitConvertors.js +++ b/src/Utilities/unitConvertors.js @@ -1,3 +1,3 @@ -export const bytesToGb = value => { - return value / (1024 * 1024 * 1024); +export const bytesToGb = (value) => { + return value / (1024 * 1024 * 1024); }; diff --git a/src/actions/DialogDeleteAction.test.tsx b/src/actions/DialogDeleteAction.test.tsx index e1e49163..fc474ef9 100644 --- a/src/actions/DialogDeleteAction.test.tsx +++ b/src/actions/DialogDeleteAction.test.tsx @@ -3,37 +3,37 @@ import * as actionGenerator from './DialogDeleteActions'; import { AxiosError } from 'axios'; describe('openModal', () => { - it('returns a state object', () => { - const modalProps: Item = { - name: 'Pedro', - type: 'Persona', - onDelete: () => jest.fn(), - onCancel: () => jest.fn() - }; - expect(actionGenerator.openModal(modalProps)).toMatchSnapshot(); - }); + it('returns a state object', () => { + const modalProps: Item = { + name: 'Pedro', + type: 'Persona', + onDelete: () => jest.fn(), + onCancel: () => jest.fn(), + }; + expect(actionGenerator.openModal(modalProps)).toMatchSnapshot(); + }); }); describe('closeModal', () => { - it('returns a state object', () => { - expect(actionGenerator.closeModal()).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.closeModal()).toMatchSnapshot(); + }); }); describe('processing', () => { - it('returns a state object', () => { - expect(actionGenerator.processing()).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.processing()).toMatchSnapshot(); + }); }); describe('openModal', () => { - it('returns a state object', () => { - const error: AxiosError = { - config: {}, - name: 'error', - message: 'my custom error message', - isAxiosError: false - }; - expect(actionGenerator.error(error)).toMatchSnapshot(); - }); + it('returns a state object', () => { + const error: AxiosError = { + config: {}, + name: 'error', + message: 'my custom error message', + isAxiosError: false, + }; + expect(actionGenerator.error(error)).toMatchSnapshot(); + }); }); diff --git a/src/actions/DialogDeleteActions.tsx b/src/actions/DialogDeleteActions.tsx index 49070a43..1614fec6 100644 --- a/src/actions/DialogDeleteActions.tsx +++ b/src/actions/DialogDeleteActions.tsx @@ -2,10 +2,10 @@ import { AxiosError } from 'axios'; import { createAction, createStandardAction } from 'typesafe-actions'; export interface Item { - name: string; - type: string; - onDelete: () => void; - onCancel: () => void; + name: string; + type: string; + onDelete: () => void; + onCancel: () => void; } export const openModal = createStandardAction('dialog/delete/open')(); diff --git a/src/actions/MappingsActions.tsx b/src/actions/MappingsActions.tsx index b8256cff..73f6992c 100644 --- a/src/actions/MappingsActions.tsx +++ b/src/actions/MappingsActions.tsx @@ -2,14 +2,14 @@ import { getAllFlagAssessments } from '../api/mappings'; import { GenericAction } from '../models/action'; export const ActionTypes = { - FETCH_ALL_FLAG_ASSESSMENT: 'FETCH_ALL_FLAG_ASSESSMENT' + FETCH_ALL_FLAG_ASSESSMENT: 'FETCH_ALL_FLAG_ASSESSMENT', }; export const fetchAllFlagAssessments = (): GenericAction => ({ - type: ActionTypes.FETCH_ALL_FLAG_ASSESSMENT, - payload: getAllFlagAssessments(), - meta: { - noError: true, - notifications: {} - } + type: ActionTypes.FETCH_ALL_FLAG_ASSESSMENT, + payload: getAllFlagAssessments(), + meta: { + noError: true, + notifications: {}, + }, }); diff --git a/src/actions/ReportActions.test.tsx b/src/actions/ReportActions.test.tsx index 885d918f..02af997f 100644 --- a/src/actions/ReportActions.test.tsx +++ b/src/actions/ReportActions.test.tsx @@ -1,44 +1,46 @@ jest.mock('../api/apiClient', () => ({ - get: jest.fn(() => Promise.resolve({})), - post: jest.fn(() => Promise.resolve({})), - put: jest.fn(() => Promise.resolve({})), - delete: jest.fn(() => Promise.resolve({})) + get: jest.fn(() => Promise.resolve({})), + post: jest.fn(() => Promise.resolve({})), + put: jest.fn(() => Promise.resolve({})), + delete: jest.fn(() => Promise.resolve({})), })); import * as actionGenerator from './ReportActions'; describe('fetchReports', () => { - it('returns a state object', () => { - expect(actionGenerator.fetchReports(1, 10, 'search text')).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.fetchReports(1, 10, 'search text')).toMatchSnapshot(); + }); }); describe('fetchReport', () => { - it('returns a state object', () => { - expect(actionGenerator.fetchReport(1)).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.fetchReport(1)).toMatchSnapshot(); + }); }); describe('deleteReport', () => { - it('returns a state object', () => { - expect(actionGenerator.deleteReport(1, 'my report name')).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.deleteReport(1, 'my report name')).toMatchSnapshot(); + }); }); describe('fetchReportWorkloadMigrationSummary', () => { - it('returns a state object', () => { - expect(actionGenerator.fetchReportWorkloadSummary(1)).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.fetchReportWorkloadSummary(1)).toMatchSnapshot(); + }); }); describe('fetchReportInitialSavingEstimation', () => { - it('returns a state object', () => { - expect(actionGenerator.fetchReportInitialSavingEstimation(1)).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.fetchReportInitialSavingEstimation(1)).toMatchSnapshot(); + }); }); describe('fetchReportWorkloadInventory', () => { - it('returns a state object', () => { - expect(actionGenerator.fetchReportWorkloadInventory(1, 1, 10, 'vmName', 'asc', new Map())).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect( + actionGenerator.fetchReportWorkloadInventory(1, 1, 10, 'vmName', 'asc', new Map()) + ).toMatchSnapshot(); + }); }); diff --git a/src/actions/ReportActions.tsx b/src/actions/ReportActions.tsx index 5e9e713a..cb9fdb14 100644 --- a/src/actions/ReportActions.tsx +++ b/src/actions/ReportActions.tsx @@ -1,50 +1,51 @@ import { - getAllReports, - getReportById, - deleteReport as destroyReport, - getReportWokloadSummary, - getReportWorkloadsDetected, - getReportFlags, - getReportInitialSavingestimation, - getReportWorkloadInventory, - getReportWorkloadInventoryAllCSV, - getReportWorkloadInventoryFilteredCSV, - getReportWorkloadInventoryAvailableFilters, - getReportPayloadDownloadLink + getAllReports, + getReportById, + deleteReport as destroyReport, + getReportWokloadSummary, + getReportWorkloadsDetected, + getReportFlags, + getReportInitialSavingestimation, + getReportWorkloadInventory, + getReportWorkloadInventoryAllCSV, + getReportWorkloadInventoryFilteredCSV, + getReportWorkloadInventoryAvailableFilters, + getReportPayloadDownloadLink, } from '../api/report'; import { GenericAction } from '../models/action'; export const ActionTypes = { - FETCH_REPORTS: 'FETCH_REPORTS', - FETCH_REPORT: 'FETCH_REPORT', - DELETE_REPORT: 'DELETE_REPORT', - FETCH_REPORT_WORKLOAD_SUMMARY: 'FETCH_REPORT_WORKLOAD_SUMMARY', - FETCH_REPORT_WORKLOADS_DETECTED: 'FETCH_REPORT_WORKLOADS_DETECTED', - FETCH_REPORT_FLAGS: 'FETCH_REPORT_FLAGS', - FETCH_REPORT_INITIAL_SAVING_ESTIMATION: 'FETCH_REPORT_INITIAL_SAVING_ESTIMATION', - FETCH_REPORT_WOKLOAD_INVENTORY: 'FETCH_REPORT_WOKLOAD_INVENTORY', - FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV: 'FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV', - FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV: 'FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV', - FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS: 'FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS', - FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK: 'FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK' + FETCH_REPORTS: 'FETCH_REPORTS', + FETCH_REPORT: 'FETCH_REPORT', + DELETE_REPORT: 'DELETE_REPORT', + FETCH_REPORT_WORKLOAD_SUMMARY: 'FETCH_REPORT_WORKLOAD_SUMMARY', + FETCH_REPORT_WORKLOADS_DETECTED: 'FETCH_REPORT_WORKLOADS_DETECTED', + FETCH_REPORT_FLAGS: 'FETCH_REPORT_FLAGS', + FETCH_REPORT_INITIAL_SAVING_ESTIMATION: 'FETCH_REPORT_INITIAL_SAVING_ESTIMATION', + FETCH_REPORT_WOKLOAD_INVENTORY: 'FETCH_REPORT_WOKLOAD_INVENTORY', + FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV: 'FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV', + FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV: 'FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV', + FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS: + 'FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS', + FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK: 'FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK', }; /** * Fetchs reports */ export const fetchReports = (page: number, perPage: number, filterText: string): GenericAction => { - return { - type: ActionTypes.FETCH_REPORTS, - payload: getAllReports(page, perPage, filterText), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: 'Failed to load reports' - } - } - } - }; + return { + type: ActionTypes.FETCH_REPORTS, + payload: getAllReports(page, perPage, filterText), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: 'Failed to load reports', + }, + }, + }, + }; }; /** @@ -52,172 +53,172 @@ export const fetchReports = (page: number, perPage: number, filterText: string): * @param id report ID */ export const fetchReport = (id: number): GenericAction => ({ - type: ActionTypes.FETCH_REPORT, - payload: getReportById(id), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report ${id}` - } - } - } + type: ActionTypes.FETCH_REPORT, + payload: getReportById(id), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report ${id}`, + }, + }, + }, }); export const deleteReport = (id: number, name: string): GenericAction => ({ - type: ActionTypes.DELETE_REPORT, - payload: destroyReport(id).then(() => ({ id })), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to delete report ${name}` - }, - fulfilled: { - variant: 'success', - title: `Report ${name} deleted` - } - } - } + type: ActionTypes.DELETE_REPORT, + payload: destroyReport(id).then(() => ({ id })), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to delete report ${name}`, + }, + fulfilled: { + variant: 'success', + title: `Report ${name} deleted`, + }, + }, + }, }); export const fetchReportWorkloadSummary = (id: number): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY, - payload: getReportWokloadSummary(id), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report workload summary ${id}` - } - } - } + type: ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY, + payload: getReportWokloadSummary(id), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report workload summary ${id}`, + }, + }, + }, }); export const fetchReportWorkloadsDetected = ( - id: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined + id: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined ): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED, - payload: getReportWorkloadsDetected(id, page, perPage, orderBy, orderDirection), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report workloads detected ${id}` - } - } - } + type: ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED, + payload: getReportWorkloadsDetected(id, page, perPage, orderBy, orderDirection), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report workloads detected ${id}`, + }, + }, + }, }); export const fetchReportFlags = ( - id: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined + id: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined ): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_FLAGS, - payload: getReportFlags(id, page, perPage, orderBy, orderDirection), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report flags ${id}` - } - } - } + type: ActionTypes.FETCH_REPORT_FLAGS, + payload: getReportFlags(id, page, perPage, orderBy, orderDirection), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report flags ${id}`, + }, + }, + }, }); export const fetchReportInitialSavingEstimation = (id: number): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION, - payload: getReportInitialSavingestimation(id), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report saving estimation ${id}` - } - } - } + type: ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION, + payload: getReportInitialSavingestimation(id), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report saving estimation ${id}`, + }, + }, + }, }); export const fetchReportWorkloadInventory = ( - id: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined, - filters: Map + id: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined, + filters: Map ): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY, - payload: getReportWorkloadInventory(id, page, perPage, orderBy, orderDirection, filters), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report workload inventory ${id}` - } - } - } + type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY, + payload: getReportWorkloadInventory(id, page, perPage, orderBy, orderDirection, filters), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report workload inventory ${id}`, + }, + }, + }, }); export const fetchReportWorkloadInventoryAllCSV = (id: number): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV, - payload: getReportWorkloadInventoryAllCSV(id), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report workload inventory ${id} csv` - } - } - } + type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV, + payload: getReportWorkloadInventoryAllCSV(id), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report workload inventory ${id} csv`, + }, + }, + }, }); export const fetchReportWorkloadInventoryFilteredCSV = ( - id: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined, - filters: Map + id: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined, + filters: Map ): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV, - payload: getReportWorkloadInventoryFilteredCSV(id, orderBy, orderDirection, filters), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report workload inventory ${id} csv` - } - } - } + type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV, + payload: getReportWorkloadInventoryFilteredCSV(id, orderBy, orderDirection, filters), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report workload inventory ${id} csv`, + }, + }, + }, }); export const fetchReportWorkloadInventoryAvailableFilters = (id: number): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS, - payload: getReportWorkloadInventoryAvailableFilters(id), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load report workload inventory filters ${id}` - } - } - } + type: ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS, + payload: getReportWorkloadInventoryAvailableFilters(id), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load report workload inventory filters ${id}`, + }, + }, + }, }); export const fetchReportPayloadDownloadLink = (id: number): GenericAction => ({ - type: ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK, - payload: getReportPayloadDownloadLink(id), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to fetch report ${id} payload download link` - } - } - } + type: ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK, + payload: getReportPayloadDownloadLink(id), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to fetch report ${id} payload download link`, + }, + }, + }, }); diff --git a/src/actions/UploadActions.test.tsx b/src/actions/UploadActions.test.tsx index bc4fa020..4ea49b5e 100644 --- a/src/actions/UploadActions.test.tsx +++ b/src/actions/UploadActions.test.tsx @@ -1,44 +1,44 @@ jest.mock('../api/apiClient', () => ({ - get: jest.fn(() => Promise.resolve({})), - post: jest.fn(() => Promise.resolve({})), - put: jest.fn(() => Promise.resolve({})), - delete: jest.fn(() => Promise.resolve({})) + get: jest.fn(() => Promise.resolve({})), + post: jest.fn(() => Promise.resolve({})), + put: jest.fn(() => Promise.resolve({})), + delete: jest.fn(() => Promise.resolve({})), })); import * as actionGenerator from './UploadActions'; import { Upload } from '../models'; describe('uploadRequest', () => { - it('returns a state object', () => { - const upload: Upload = { - file: new File([''], 'myFile.zip'), - reportName: 'myReportName', - reportDescription: 'myReportDescription', - yearOverYearGrowthRatePercentage: 5, - percentageOfHypervisorsMigratedOnYear1: 50, - percentageOfHypervisorsMigratedOnYear2: 30, - percentageOfHypervisorsMigratedOnYear3: 10 - }; + it('returns a state object', () => { + const upload: Upload = { + file: new File([''], 'myFile.zip'), + reportName: 'myReportName', + reportDescription: 'myReportDescription', + yearOverYearGrowthRatePercentage: 5, + percentageOfHypervisorsMigratedOnYear1: 50, + percentageOfHypervisorsMigratedOnYear2: 30, + percentageOfHypervisorsMigratedOnYear3: 10, + }; - expect(actionGenerator.uploadRequest(upload)).toMatchSnapshot(); - }); + expect(actionGenerator.uploadRequest(upload)).toMatchSnapshot(); + }); }); describe('uploadProgress', () => { - it('returns a state object', () => { - expect(actionGenerator.uploadProgress(60)).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.uploadProgress(60)).toMatchSnapshot(); + }); }); describe('selectFile', () => { - it('returns a state object', () => { - const file = new File([''], 'myFile.zip'); - expect(actionGenerator.selectUploadFile(file)).toMatchSnapshot(); - }); + it('returns a state object', () => { + const file = new File([''], 'myFile.zip'); + expect(actionGenerator.selectUploadFile(file)).toMatchSnapshot(); + }); }); describe('resetUploadFile', () => { - it('returns a state object', () => { - expect(actionGenerator.resetUploadFile()).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.resetUploadFile()).toMatchSnapshot(); + }); }); diff --git a/src/actions/UploadActions.tsx b/src/actions/UploadActions.tsx index 75466ed5..153f96b4 100644 --- a/src/actions/UploadActions.tsx +++ b/src/actions/UploadActions.tsx @@ -3,43 +3,43 @@ import { GenericAction } from '../models/action'; import { Upload } from '../models'; export const ActionTypes = { - UPLOAD_REQUEST: 'UPLOAD_REQUEST', - UPLOAD_PROGRESS: 'UPLOAD_PROGRESS', - SELECT_UPLOAD_FILE: 'SELECT_UPLOAD_FILE', - RESET_UPLOAD_FILE: 'RESET_UPLOAD_FILE' + UPLOAD_REQUEST: 'UPLOAD_REQUEST', + UPLOAD_PROGRESS: 'UPLOAD_PROGRESS', + SELECT_UPLOAD_FILE: 'SELECT_UPLOAD_FILE', + RESET_UPLOAD_FILE: 'RESET_UPLOAD_FILE', }; export const uploadRequest = (upload: Upload, config = {}): GenericAction => { - const formData = new FormData(); - Object.keys(upload).forEach(key => formData.append(key, upload[key].toString())); + const formData = new FormData(); + Object.keys(upload).forEach((key) => formData.append(key, upload[key].toString())); - formData.set('file', upload.file, upload.file.name); - return { - type: ActionTypes.UPLOAD_REQUEST, - payload: uploadFile(formData, config), - meta: { - file: upload.file, - noError: true, - notifications: {} - } - }; + formData.set('file', upload.file, upload.file.name); + return { + type: ActionTypes.UPLOAD_REQUEST, + payload: uploadFile(formData, config), + meta: { + file: upload.file, + noError: true, + notifications: {}, + }, + }; }; export const uploadProgress = (progress: number): GenericAction => ({ - type: ActionTypes.UPLOAD_PROGRESS, - payload: { - progress - } + type: ActionTypes.UPLOAD_PROGRESS, + payload: { + progress, + }, }); export const selectUploadFile = (file: File): GenericAction => ({ - type: ActionTypes.SELECT_UPLOAD_FILE, - payload: { - file - } + type: ActionTypes.SELECT_UPLOAD_FILE, + payload: { + file, + }, }); export const resetUploadFile = (): GenericAction => ({ - type: ActionTypes.RESET_UPLOAD_FILE, - payload: {} + type: ActionTypes.RESET_UPLOAD_FILE, + payload: {}, }); diff --git a/src/actions/UserActions.test.tsx b/src/actions/UserActions.test.tsx index 56712e2a..c2eba278 100644 --- a/src/actions/UserActions.test.tsx +++ b/src/actions/UserActions.test.tsx @@ -1,24 +1,24 @@ jest.mock('../api/apiClient', () => ({ - get: jest.fn(() => Promise.resolve({})), - post: jest.fn(() => Promise.resolve({})), - put: jest.fn(() => Promise.resolve({})), - delete: jest.fn(() => Promise.resolve({})) + get: jest.fn(() => Promise.resolve({})), + post: jest.fn(() => Promise.resolve({})), + put: jest.fn(() => Promise.resolve({})), + delete: jest.fn(() => Promise.resolve({})), })); import * as actionGenerator from './UserActions'; import { Upload, User } from '../models'; describe('fetchUser', () => { - it('returns a state object', () => { - expect(actionGenerator.fetchUser()).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.fetchUser()).toMatchSnapshot(); + }); }); describe('updateUser', () => { - it('returns a state object', () => { - const user: User = { - firstTimeCreatingReports: true - }; - expect(actionGenerator.updateUser(user)).toMatchSnapshot(); - }); + it('returns a state object', () => { + const user: User = { + firstTimeCreatingReports: true, + }; + expect(actionGenerator.updateUser(user)).toMatchSnapshot(); + }); }); diff --git a/src/actions/UserActions.tsx b/src/actions/UserActions.tsx index a8a06622..62798c85 100644 --- a/src/actions/UserActions.tsx +++ b/src/actions/UserActions.tsx @@ -3,26 +3,26 @@ import { GenericAction } from '../models/action'; import { User } from '../models'; export const ActionTypes = { - FETCH_USER: 'FETCH_USER', - UPDATE_USER: 'UPDATE_USER' + FETCH_USER: 'FETCH_USER', + UPDATE_USER: 'UPDATE_USER', }; export const fetchUser = (): GenericAction => ({ - type: ActionTypes.FETCH_USER, - payload: getUser(), - meta: { - notifications: { - rejected: { - variant: 'danger', - title: `Failed to load user` - } - } - } + type: ActionTypes.FETCH_USER, + payload: getUser(), + meta: { + notifications: { + rejected: { + variant: 'danger', + title: `Failed to load user`, + }, + }, + }, }); export const updateUser = (user: User): GenericAction => ({ - type: ActionTypes.UPDATE_USER, - payload: { - user - } + type: ActionTypes.UPDATE_USER, + payload: { + user, + }, }); diff --git a/src/api/apiClient.test.tsx b/src/api/apiClient.test.tsx index 9971a706..bb33789c 100644 --- a/src/api/apiClient.test.tsx +++ b/src/api/apiClient.test.tsx @@ -1,66 +1,66 @@ import ApiClient from './apiClient'; describe('request', () => { - const objectResolver = Promise.resolve({}); - const mockFetchPromise = Promise.resolve({ - ok: true, - json: () => objectResolver - }); - const fetchSpy: any = jest.fn(() => mockFetchPromise); + const objectResolver = Promise.resolve({}); + const mockFetchPromise = Promise.resolve({ + ok: true, + json: () => objectResolver, + }); + const fetchSpy: any = jest.fn(() => mockFetchPromise); - beforeAll(() => { - window.fetch = fetchSpy; - }); + beforeAll(() => { + window.fetch = fetchSpy; + }); - it('calls fetch', () => { - expect(ApiClient.request('/path', {}, 'get')).toEqual(objectResolver); - }); + it('calls fetch', () => { + expect(ApiClient.request('/path', {}, 'get')).toEqual(objectResolver); + }); - afterAll(() => { - const fetch: any = window.fetch; - fetch.mockClear(); - }); + afterAll(() => { + const fetch: any = window.fetch; + fetch.mockClear(); + }); }); describe('API calls', () => { - const mockGet = jest.fn(() => ({})); + const mockGet = jest.fn(() => ({})); - beforeAll(() => { - Object.assign(ApiClient, { - request: mockGet - }); + beforeAll(() => { + Object.assign(ApiClient, { + request: mockGet, }); + }); - describe('post', () => { - it('calls request with /create and post', () => { - expect(ApiClient.post('/create', { key: 'value' })).toEqual({}); - expect(ApiClient.request).toHaveBeenCalledWith('/create', { key: 'value' }, 'post', {}); - }); + describe('post', () => { + it('calls request with /create and post', () => { + expect(ApiClient.post('/create', { key: 'value' })).toEqual({}); + expect(ApiClient.request).toHaveBeenCalledWith('/create', { key: 'value' }, 'post', {}); }); + }); - describe('get', () => { - it('calls request with path and get', () => { - expect(ApiClient.get('/get')).toEqual({}); - expect(ApiClient.request).toHaveBeenCalledWith('/get'); - }); + describe('get', () => { + it('calls request with path and get', () => { + expect(ApiClient.get('/get')).toEqual({}); + expect(ApiClient.request).toHaveBeenCalledWith('/get'); }); + }); - describe('put', () => { - it('calls request with path and put', () => { - expect(ApiClient.put('/update', { key: 'value' })).toEqual({}); - expect(ApiClient.request).toHaveBeenCalledWith('/update', { key: 'value' }, 'put', {}); - }); + describe('put', () => { + it('calls request with path and put', () => { + expect(ApiClient.put('/update', { key: 'value' })).toEqual({}); + expect(ApiClient.request).toHaveBeenCalledWith('/update', { key: 'value' }, 'put', {}); }); + }); - describe('delete', () => { - it('calls request with path and delete', () => { - expect(ApiClient.delete('/destroy')).toEqual({}); - expect(ApiClient.request).toHaveBeenCalledWith('/destroy', null, 'delete', {}); - }); + describe('delete', () => { + it('calls request with path and delete', () => { + expect(ApiClient.delete('/destroy')).toEqual({}); + expect(ApiClient.request).toHaveBeenCalledWith('/destroy', null, 'delete', {}); }); + }); - afterAll(() => { - const request: any = ApiClient.request; - request.mockClear(); - }); + afterAll(() => { + const request: any = ApiClient.request; + request.mockClear(); + }); }); diff --git a/src/api/apiClient.tsx b/src/api/apiClient.tsx index cb830c7e..548044b7 100644 --- a/src/api/apiClient.tsx +++ b/src/api/apiClient.tsx @@ -1,40 +1,40 @@ import axios, { AxiosPromise } from 'axios'; class BackendAPIClient { - public static request( - path: string, - body: any = null, - method: 'get' | 'post' | 'put' | 'delete' | 'options' | 'patch' | undefined = 'get', - config = {} - ): AxiosPromise { - return axios.request( - Object.assign( - {}, - { - url: path, - method, - data: body - }, - config - ) - ); - } + public static request( + path: string, + body: any = null, + method: 'get' | 'post' | 'put' | 'delete' | 'options' | 'patch' | undefined = 'get', + config = {} + ): AxiosPromise { + return axios.request( + Object.assign( + {}, + { + url: path, + method, + data: body, + }, + config + ) + ); + } - public static post(path: string, body: any, config = {}): AxiosPromise { - return this.request(path, body, 'post', config); - } + public static post(path: string, body: any, config = {}): AxiosPromise { + return this.request(path, body, 'post', config); + } - public static put(path: string, body: any, config = {}): AxiosPromise { - return this.request(path, body, 'put', config); - } + public static put(path: string, body: any, config = {}): AxiosPromise { + return this.request(path, body, 'put', config); + } - public static get(path: string): AxiosPromise { - return this.request(path); - } + public static get(path: string): AxiosPromise { + return this.request(path); + } - public static delete(path: string, config = {}) { - return this.request(path, null, 'delete', config); - } + public static delete(path: string, config = {}) { + return this.request(path, null, 'delete', config); + } } export default BackendAPIClient; diff --git a/src/api/apiInit.tsx b/src/api/apiInit.tsx index 39ce4886..4a67182d 100644 --- a/src/api/apiInit.tsx +++ b/src/api/apiInit.tsx @@ -1,15 +1,15 @@ import axios, { AxiosRequestConfig } from 'axios'; export const API_BASE_URL = '/api/xavier/v1.0'; -declare var insights: any; +declare let insights: any; export const authInterceptor = (reqConfig: AxiosRequestConfig): AxiosRequestConfig => { - return insights.chrome.auth.getUser().then(() => { - return Promise.resolve(reqConfig); - }); + return insights.chrome.auth.getUser().then(() => { + return Promise.resolve(reqConfig); + }); }; export const initApi = () => { - axios.defaults.baseURL = `${API_BASE_URL}`; - axios.interceptors.request.use(authInterceptor); + axios.defaults.baseURL = `${API_BASE_URL}`; + axios.interceptors.request.use(authInterceptor); }; diff --git a/src/api/mappings.tsx b/src/api/mappings.tsx index bfc53735..fad560c2 100644 --- a/src/api/mappings.tsx +++ b/src/api/mappings.tsx @@ -3,5 +3,5 @@ import { FlagAssessmentModel } from '../models'; import ApiClient from './apiClient'; export function getAllFlagAssessments(): AxiosPromise { - return ApiClient.get('/mappings/flag-assessment'); + return ApiClient.get('/mappings/flag-assessment'); } diff --git a/src/api/report.test.tsx b/src/api/report.test.tsx index e9b51373..3e14c645 100644 --- a/src/api/report.test.tsx +++ b/src/api/report.test.tsx @@ -1,20 +1,20 @@ jest.mock('./apiClient', () => ({ - get: jest.fn(() => Promise.resolve({})), - post: jest.fn(() => Promise.resolve({})), - put: jest.fn(() => Promise.resolve({})), - delete: jest.fn(() => Promise.resolve({})) + get: jest.fn(() => Promise.resolve({})), + post: jest.fn(() => Promise.resolve({})), + put: jest.fn(() => Promise.resolve({})), + delete: jest.fn(() => Promise.resolve({})), })); import * as actionGenerator from './report'; describe('getAllReports', () => { - it('returns a state object', () => { - expect(actionGenerator.getAllReports(1, 10, '')).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.getAllReports(1, 10, '')).toMatchSnapshot(); + }); }); describe('getReportById', () => { - it('returns a state object', () => { - expect(actionGenerator.getReportById(1)).toMatchSnapshot(); - }); + it('returns a state object', () => { + expect(actionGenerator.getReportById(1)).toMatchSnapshot(); + }); }); diff --git a/src/api/report.tsx b/src/api/report.tsx index ee155f14..718b46a8 100644 --- a/src/api/report.tsx +++ b/src/api/report.tsx @@ -1,207 +1,215 @@ import { AxiosPromise } from 'axios'; import ApiClient from './apiClient'; import { - Report, - ReportWorkloadSummary, - ReportInitialSavingEstimation, - SearchResult, - ReportWorkloadInventory, - WorkloadModel, - FlagModel, - WorkloadInventoryReportFiltersModel, - PaginationResponse + Report, + ReportWorkloadSummary, + ReportInitialSavingEstimation, + SearchResult, + ReportWorkloadInventory, + WorkloadModel, + FlagModel, + WorkloadInventoryReportFiltersModel, + PaginationResponse, } from '../models'; -export function getAllReports(page: number, perPage: number, filterText: string): AxiosPromise> { - // Using page-1 because the backend considers page 0 as the first one - const params = { - offset: (page - 1) * perPage, - limit: perPage, - filterText - }; - const query: string[] = []; - - Object.keys(params).map(key => { - const value = params[key]; - if (value !== undefined) { - query.push(`${key}=${value}`); - } - }); - - const url = `/report?${query.join('&')}`; - return ApiClient.get>(url); +export function getAllReports( + page: number, + perPage: number, + filterText: string +): AxiosPromise> { + // Using page-1 because the backend considers page 0 as the first one + const params = { + offset: (page - 1) * perPage, + limit: perPage, + filterText, + }; + const query: string[] = []; + + Object.keys(params).map((key) => { + const value = params[key]; + if (value !== undefined) { + query.push(`${key}=${value}`); + } + }); + + const url = `/report?${query.join('&')}`; + return ApiClient.get>(url); } export function getReportById(id: number): AxiosPromise { - return ApiClient.get(`/report/${id}`); + return ApiClient.get(`/report/${id}`); } export function deleteReport(id: number): AxiosPromise { - return ApiClient.delete(`/report/${id}`); + return ApiClient.delete(`/report/${id}`); } export function getReportWokloadSummary(id: number): AxiosPromise { - return ApiClient.get(`/report/${id}/workload-summary`); + return ApiClient.get(`/report/${id}/workload-summary`); } export function getReportWorkloadsDetected( - id: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined + id: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined ): AxiosPromise> { - let sortBy = orderBy ? orderBy : undefined; - if (sortBy && orderDirection) { - sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}` + let sortBy = orderBy ? orderBy : undefined; + if (sortBy && orderDirection) { + sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}`; + } + + // Using page-1 because the backend considers page 0 as the first one + const params = { + offset: (page - 1) * perPage, + limit: perPage, + sort_by: sortBy, + }; + const query: string[] = []; + + Object.keys(params).map((key) => { + const value = params[key]; + if (value !== undefined) { + query.push(`${key}=${value}`); } + }); - // Using page-1 because the backend considers page 0 as the first one - const params = { - offset: (page - 1) * perPage, - limit: perPage, - sort_by: sortBy - }; - const query: string[] = []; - - Object.keys(params).map(key => { - const value = params[key]; - if (value !== undefined) { - query.push(`${key}=${value}`); - } - }); - - const url = `/report/${id}/workload-summary/workloads?${query.join('&')}`; - return ApiClient.get>(url); + const url = `/report/${id}/workload-summary/workloads?${query.join('&')}`; + return ApiClient.get>(url); } export function getReportFlags( - id: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined + id: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined ): AxiosPromise> { - let sortBy = orderBy ? orderBy : undefined; - if (sortBy && orderDirection) { - sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}` + let sortBy = orderBy ? orderBy : undefined; + if (sortBy && orderDirection) { + sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}`; + } + + const params = { + offset: (page - 1) * perPage, + limit: perPage, + sort_by: sortBy, + }; + + const query: string[] = []; + + Object.keys(params).map((key) => { + const value = params[key]; + if (value !== undefined) { + query.push(`${key}=${value}`); } + }); - const params = { - offset: (page - 1) * perPage, - limit: perPage, - sort_by: sortBy - }; - - const query: string[] = []; - - Object.keys(params).map(key => { - const value = params[key]; - if (value !== undefined) { - query.push(`${key}=${value}`); - } - }); - - const url = `/report/${id}/workload-summary/flags?${query.join('&')}`; - return ApiClient.get>(url); + const url = `/report/${id}/workload-summary/flags?${query.join('&')}`; + return ApiClient.get>(url); } -export function getReportInitialSavingestimation(id: number): AxiosPromise { - return ApiClient.get(`/report/${id}/initial-saving-estimation`); +export function getReportInitialSavingestimation( + id: number +): AxiosPromise { + return ApiClient.get(`/report/${id}/initial-saving-estimation`); } export function getReportWorkloadInventory( - id: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined, - filters: Map + id: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined, + filters: Map ): AxiosPromise> { - let sortBy = orderBy ? orderBy : undefined; - if (sortBy && orderDirection) { - sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}` + let sortBy = orderBy ? orderBy : undefined; + if (sortBy && orderDirection) { + sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}`; + } + + const params = { + offset: (page - 1) * perPage, + limit: perPage, + sort_by: sortBy, + }; + + const query: string[] = []; + + Object.keys(params).map((key) => { + const value = params[key]; + if (value !== undefined) { + query.push(`${key}=${value}`); } + }); - const params = { - offset: (page - 1) * perPage, - limit: perPage, - sort_by: sortBy - }; - - const query: string[] = []; - - Object.keys(params).map(key => { - const value = params[key]; - if (value !== undefined) { - query.push(`${key}=${value}`); - } - }); - - filters.forEach((arrayValue: string[], key: string) => { - if (arrayValue.length > 0) { - arrayValue.forEach(value => { - query.push(`${key}=${value}`); - }); - } - }); - - const url = `/report/${id}/workload-inventory?${query.join('&')}`; - return ApiClient.get>(url); + filters.forEach((arrayValue: string[], key: string) => { + if (arrayValue.length > 0) { + arrayValue.forEach((value) => { + query.push(`${key}=${value}`); + }); + } + }); + + const url = `/report/${id}/workload-inventory?${query.join('&')}`; + return ApiClient.get>(url); } export function getReportWorkloadInventoryFilteredCSV( - id: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined, - filters: Map + id: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined, + filters: Map ): AxiosPromise { - let sortBy = orderBy ? orderBy : undefined; - if (sortBy && orderDirection) { - sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}` + let sortBy = orderBy ? orderBy : undefined; + if (sortBy && orderDirection) { + sortBy = `${sortBy}:${orderDirection === 'asc' ? 'asc' : 'desc'}`; + } + + const params = { + sort_by: sortBy, + }; + + const query: string[] = []; + + Object.keys(params).map((key) => { + const value = params[key]; + if (value !== undefined) { + query.push(`${key}=${value}`); + } + }); + + filters.forEach((arrayValue: string[], key: string) => { + if (arrayValue.length > 0) { + arrayValue.forEach((value) => { + query.push(`${key}=${value}`); + }); } + }); - const params = { - sort_by: sortBy - }; - - const query: string[] = []; - - Object.keys(params).map(key => { - const value = params[key]; - if (value !== undefined) { - query.push(`${key}=${value}`); - } - }); - - filters.forEach((arrayValue: string[], key: string) => { - if (arrayValue.length > 0) { - arrayValue.forEach(value => { - query.push(`${key}=${value}`); - }); - } - }); - - const url = `/report/${id}/workload-inventory/filtered-csv?${query.join('&')}`; - return ApiClient.request(url, null, 'get', { - responseType: 'blob' - }); + const url = `/report/${id}/workload-inventory/filtered-csv?${query.join('&')}`; + return ApiClient.request(url, null, 'get', { + responseType: 'blob', + }); } export function getReportWorkloadInventoryAllCSV(id: number): AxiosPromise { - const url = `/report/${id}/workload-inventory/csv`; - return ApiClient.request(url, null, 'get', { - responseType: 'blob' - }); + const url = `/report/${id}/workload-inventory/csv`; + return ApiClient.request(url, null, 'get', { + responseType: 'blob', + }); } export function getReportWorkloadInventoryAvailableFilters( - id: number + id: number ): AxiosPromise { - return ApiClient.get(`/report/${id}/workload-inventory/available-filters`); + return ApiClient.get( + `/report/${id}/workload-inventory/available-filters` + ); } export function getReportPayloadDownloadLink(id: number): AxiosPromise { - const url = `/report/${id}/payload-link`; - return ApiClient.get(url); + const url = `/report/${id}/payload-link`; + return ApiClient.get(url); } diff --git a/src/api/upload.test.tsx b/src/api/upload.test.tsx index 95ad57a6..c05431aa 100644 --- a/src/api/upload.test.tsx +++ b/src/api/upload.test.tsx @@ -1,21 +1,21 @@ jest.mock('./apiClient', () => ({ - get: jest.fn(() => Promise.resolve({})), - post: jest.fn(() => Promise.resolve({})), - put: jest.fn(() => Promise.resolve({})), - delete: jest.fn(() => Promise.resolve({})) + get: jest.fn(() => Promise.resolve({})), + post: jest.fn(() => Promise.resolve({})), + put: jest.fn(() => Promise.resolve({})), + delete: jest.fn(() => Promise.resolve({})), })); import * as actionGenerator from './upload'; describe('uploadFile', () => { - it('returns a state object', () => { - const file = new File([''], 'myFile.zip'); + it('returns a state object', () => { + const file = new File([''], 'myFile.zip'); - const formData = new FormData(); - formData.append('file', file, file.name); - formData.append('customerId', 'myCustomerId'); + const formData = new FormData(); + formData.append('file', file, file.name); + formData.append('customerId', 'myCustomerId'); - const config = {}; - expect(actionGenerator.uploadFile(formData, config)).toMatchSnapshot(); - }); + const config = {}; + expect(actionGenerator.uploadFile(formData, config)).toMatchSnapshot(); + }); }); diff --git a/src/api/upload.tsx b/src/api/upload.tsx index 951bf047..87f600a1 100644 --- a/src/api/upload.tsx +++ b/src/api/upload.tsx @@ -2,5 +2,5 @@ import ApiClient from './apiClient'; import { AxiosPromise } from 'axios'; export function uploadFile(formData: FormData, config = {}): AxiosPromise { - return ApiClient.post('/upload', formData, config); + return ApiClient.post('/upload', formData, config); } diff --git a/src/api/user.tsx b/src/api/user.tsx index 44601d50..2122cf2b 100644 --- a/src/api/user.tsx +++ b/src/api/user.tsx @@ -3,5 +3,5 @@ import { User } from '../models'; import ApiClient from './apiClient'; export function getUser(): AxiosPromise { - return ApiClient.get(`/user`); + return ApiClient.get(`/user`); } diff --git a/src/entry-dev.js b/src/entry-dev.js index 06ccca0a..593eedb2 100644 --- a/src/entry-dev.js +++ b/src/entry-dev.js @@ -11,11 +11,11 @@ import { initApi } from './api/apiInit'; initApi(); ReactDOM.render( - - - - - , + + + + + , - document.getElementById('root') + document.getElementById('root') ); diff --git a/src/entry.js b/src/entry.js index 56efa1f7..b4e751de 100644 --- a/src/entry.js +++ b/src/entry.js @@ -10,11 +10,11 @@ import { initApi } from './api/apiInit'; initApi(); ReactDOM.render( - - - - - , + + + + + , - document.getElementById('root') + document.getElementById('root') ); diff --git a/src/entry.test.js b/src/entry.test.js index d3c4491b..59e3f30d 100644 --- a/src/entry.test.js +++ b/src/entry.test.js @@ -2,13 +2,13 @@ import getBaseName from './Utilities/getBaseName'; describe('Utilities/getBaseName', () => { - it('should find the right base name on Stable ', () => { - expect(getBaseName('/insights/foo/bar/baz')).toEqual('/insights/foo'); - expect(getBaseName('/rhcs/bar/bar/baz')).toEqual('/rhcs/bar'); - }); + it('should find the right base name on Stable ', () => { + expect(getBaseName('/insights/foo/bar/baz')).toEqual('/insights/foo'); + expect(getBaseName('/rhcs/bar/bar/baz')).toEqual('/rhcs/bar'); + }); - it('should find the right base name on Beta ', () => { - expect(getBaseName('/beta/insights/foo/bar/baz')).toEqual('/beta/insights/foo'); - expect(getBaseName('/beta/test/fff/bar/baz')).toEqual('/beta/test/fff'); - }); + it('should find the right base name on Beta ', () => { + expect(getBaseName('/beta/insights/foo/bar/baz')).toEqual('/beta/insights/foo'); + expect(getBaseName('/beta/test/fff/bar/baz')).toEqual('/beta/test/fff'); + }); }); diff --git a/src/models/Mappings.tsx b/src/models/Mappings.tsx index 69ce2dbf..73a0d5f5 100644 --- a/src/models/Mappings.tsx +++ b/src/models/Mappings.tsx @@ -1,6 +1,6 @@ export interface FlagAssessmentModel { - flag: string; - osName: string; - flagLabel: string; - assessment: string; + flag: string; + osName: string; + flagLabel: string; + assessment: string; } diff --git a/src/models/Report.tsx b/src/models/Report.tsx index 0c241a61..69611603 100644 --- a/src/models/Report.tsx +++ b/src/models/Report.tsx @@ -1,316 +1,316 @@ export interface PaginationResponse { - meta: PaginationMeta; - links: PaginationLinks; - data: T[]; + meta: PaginationMeta; + links: PaginationLinks; + data: T[]; } export interface PaginationMeta { - count: number; - limit: number; - offset: number; + count: number; + limit: number; + offset: number; } export interface PaginationLinks { - first: string; - previous: string | null; - next: string | null; - last: string; + first: string; + previous: string | null; + next: string | null; + last: string; } export interface SearchResult { - totalElements: number; - content: T[]; + totalElements: number; + content: T[]; } export interface Report { - id: number; - reportName: string; - reportDescription: string; - payloadName: string; - inserted: number | string; - lastUpdate: number | string; - status: 'CREATED' | 'IN_PROGRESS' | 'FAILED'; + id: number; + reportName: string; + reportDescription: string; + payloadName: string; + inserted: number | string; + lastUpdate: number | string; + status: 'CREATED' | 'IN_PROGRESS' | 'FAILED'; } export interface ReportWorkloadSummary { - summaryModels: Summary[]; - complexityModel: ComplexityModel; - recommendedTargetsIMSModel: RecommendedTargetsIMSModel; - workloadsDetectedOSTypeModels: WorkloadDetectedOSTypeModel[]; - scanRunModels: ScanRunModel[]; - javaRuntimes: JavaRuntimeModel[]; - applicationPlatforms: ApplicationPlatformModel[]; - osInformation: OSInformationModel[]; + summaryModels: Summary[]; + complexityModel: ComplexityModel; + recommendedTargetsIMSModel: RecommendedTargetsIMSModel; + workloadsDetectedOSTypeModels: WorkloadDetectedOSTypeModel[]; + scanRunModels: ScanRunModel[]; + javaRuntimes: JavaRuntimeModel[]; + applicationPlatforms: ApplicationPlatformModel[]; + osInformation: OSInformationModel[]; } export interface Summary { - provider: string; - product: string; - version: string; - hosts: number; - sockets: number; - clusters: number; - vms: number; + provider: string; + product: string; + version: string; + hosts: number; + sockets: number; + clusters: number; + vms: number; } export interface ComplexityModel { - unknown: number; - hard: number; - medium: number; - easy: number; - unsupported: number; + unknown: number; + hard: number; + medium: number; + easy: number; + unsupported: number; } export interface RecommendedTargetsIMSModel { - total: number; - rhv: number; - osp: number; - rhel: number; - ocp: number; - openjdk: number; - jbosseap: number; + total: number; + rhv: number; + osp: number; + rhel: number; + ocp: number; + openjdk: number; + jbosseap: number; } export interface WorkloadDetectedOSTypeModel { - total: number; - osName: string; + total: number; + osName: string; } export interface ScanRunModel { - target: string; - smartStateEnabled: boolean; - date: number | string; + target: string; + smartStateEnabled: boolean; + date: number | string; } export interface JavaRuntimeModel { - vendor: string; - version: string; - total: number; - priority: number | null; + vendor: string; + version: string; + total: number; + priority: number | null; } export interface ApplicationPlatformModel { - name: string; - version: string | null; - total: number; - priority: number | null; + name: string; + version: string | null; + total: number; + priority: number | null; } export interface OSInformationModel { - osFamily: string; - version: string | null; - total: number; - priority: number | null; + osFamily: string; + version: string | null; + total: number; + priority: number | null; } export interface WorkloadModel { - workload: string; - osName: string; - clusters: number; - vms: number; + workload: string; + osName: string; + clusters: number; + vms: number; } export interface FlagModel { - workload: string; - flag: string; - osName: string; - clusters: number; - vms: number; + workload: string; + flag: string; + osName: string; + clusters: number; + vms: number; } export interface ReportInitialSavingEstimation { - id: number; - customerId: string; - fileName: string; - creationDate: number | string; - environmentModel: EnvironmentModel; - sourceCostsModel: SourceCostsModel; - sourceRampDownCostsModel: SourceRampDownCostsModel; - rhvRampUpCostsModel: RHVRampUpCostsModel; - rhvYearByYearCostsModel: RHVYearByYearCostsModel; - rhvSavingsModel: RHVSavingsModel; - rhvAdditionalContainerCapacityModel: RHVAdditionalContainerCapacityModel; - rhvOrderFormModel: RHVOrderFormModel; + id: number; + customerId: string; + fileName: string; + creationDate: number | string; + environmentModel: EnvironmentModel; + sourceCostsModel: SourceCostsModel; + sourceRampDownCostsModel: SourceRampDownCostsModel; + rhvRampUpCostsModel: RHVRampUpCostsModel; + rhvYearByYearCostsModel: RHVYearByYearCostsModel; + rhvSavingsModel: RHVSavingsModel; + rhvAdditionalContainerCapacityModel: RHVAdditionalContainerCapacityModel; + rhvOrderFormModel: RHVOrderFormModel; } export interface EnvironmentModel { - sourceProductIndicator: number; - hypervisors: number; - year1Hypervisor: number; - year2Hypervisor: number; - year3Hypervisor: number; - growthRatePercentage: number; + sourceProductIndicator: number; + hypervisors: number; + year1Hypervisor: number; + year2Hypervisor: number; + year3Hypervisor: number; + growthRatePercentage: number; } export interface SourceCostsModel { - sourceLicenseValue?: number; - sourceMaintenanceValue?: number; - year1Server?: number; - year1SourceValue?: number; - year1SourceMaintenanceValue?: number; - year2Server?: number; - year2SourceValue?: number; - year2SourceMaintenanceValue?: number; - year3Server?: number; - year3SourceValue?: number; - year3SourceMaintenanceValue?: number; - totSourceValue?: number; - totSourceMaintenanceValue?: number; - totalSourceValue?: number; - sourceNewELAIndicator?: number; - sourceNewHighValue?: number; - sourceNewLikelyValue?: number; - sourceNewLowValue?: number; - sourceRenewHighValue: number; - sourceRenewLikelyValue: number; - sourceRenewLowValue: number; + sourceLicenseValue?: number; + sourceMaintenanceValue?: number; + year1Server?: number; + year1SourceValue?: number; + year1SourceMaintenanceValue?: number; + year2Server?: number; + year2SourceValue?: number; + year2SourceMaintenanceValue?: number; + year3Server?: number; + year3SourceValue?: number; + year3SourceMaintenanceValue?: number; + totSourceValue?: number; + totSourceMaintenanceValue?: number; + totalSourceValue?: number; + sourceNewELAIndicator?: number; + sourceNewHighValue?: number; + sourceNewLikelyValue?: number; + sourceNewLowValue?: number; + sourceRenewHighValue: number; + sourceRenewLikelyValue: number; + sourceRenewLowValue: number; } export interface SourceRampDownCostsModel { - year1ServersOffSource?: number; - year1SourceActiveLicense?: number; - year1SourcePaidMaintenance?: number; - year1SourceMaintenancePerServerValue?: number; - year1SourceMaintenanceTotalValue: number; - year2ServersOffSource?: number; - year2SourceActiveLicense?: number; - year2SourcePaidMaintenance?: number; - year2SourceMaintenancePerServerValue?: number; - year2SourceMaintenanceTotalValue: number; - year3ServersOffSource?: number; - year3SourceActiveLicense?: number; - year3SourcePaidMaintenance?: number; - year3SourceMaintenancePerServerValue?: number; - year3SourceMaintenanceTotalValue: number; + year1ServersOffSource?: number; + year1SourceActiveLicense?: number; + year1SourcePaidMaintenance?: number; + year1SourceMaintenancePerServerValue?: number; + year1SourceMaintenanceTotalValue: number; + year2ServersOffSource?: number; + year2SourceActiveLicense?: number; + year2SourcePaidMaintenance?: number; + year2SourceMaintenancePerServerValue?: number; + year2SourceMaintenanceTotalValue: number; + year3ServersOffSource?: number; + year3SourceActiveLicense?: number; + year3SourcePaidMaintenance?: number; + year3SourceMaintenancePerServerValue?: number; + year3SourceMaintenanceTotalValue: number; } export interface RHVRampUpCostsModel { - year1RhvServers?: number; - year1RhvCompSubs?: number; - year1RhvPaidSubs?: number; - year1RhvPerServerValue?: number; - year1RhvTotalValue: number; - year1RhvServersGrowth?: number; - year1RhvCompSubsGrowth?: number; - year1RhvPaidSubsGrowth?: number; - year1RhvPerServerGrowthValue?: number; - year1RhvTotalGrowthValue?: number; - year1RhvGrandTotalGrowthValue: number; - rhvSwitchLearningSubsValue: number; - rhvSwitchConsultValue: number; - rhvSwitchTAndEValue: number; - year2RhvServers?: number; - year2RhvCompSubs?: number; - year2RhvPaidSubs?: number; - year2RhvPerServerValue?: number; - year2RhvTotalValue: number; - year2RhvServersGrowth?: number; - year2RhvCompSubsGrowth?: number; - year2RhvPaidSubsGrowth?: number; - year2RhvPerServerGrowthValue?: number; - year2RhvTotalGrowthValue?: number; - year2RhvGrandTotalGrowthValue: number; - year3RhvServers?: number; - year3RhvCompSubs?: number; - year3RhvPaidSubs?: number; - year3RhvPerServerValue?: number; - year3RhvTotalValue: number; - year3RhvServersGrowth?: number; - year3RhvCompSubsGrowth?: number; - year3RhvPaidSubsGrowth?: number; - year3RhvPerServerGrowthValue?: number; - year3RhvTotalGrowthValue?: number; - year3RhvGrandTotalGrowthValue: number; + year1RhvServers?: number; + year1RhvCompSubs?: number; + year1RhvPaidSubs?: number; + year1RhvPerServerValue?: number; + year1RhvTotalValue: number; + year1RhvServersGrowth?: number; + year1RhvCompSubsGrowth?: number; + year1RhvPaidSubsGrowth?: number; + year1RhvPerServerGrowthValue?: number; + year1RhvTotalGrowthValue?: number; + year1RhvGrandTotalGrowthValue: number; + rhvSwitchLearningSubsValue: number; + rhvSwitchConsultValue: number; + rhvSwitchTAndEValue: number; + year2RhvServers?: number; + year2RhvCompSubs?: number; + year2RhvPaidSubs?: number; + year2RhvPerServerValue?: number; + year2RhvTotalValue: number; + year2RhvServersGrowth?: number; + year2RhvCompSubsGrowth?: number; + year2RhvPaidSubsGrowth?: number; + year2RhvPerServerGrowthValue?: number; + year2RhvTotalGrowthValue?: number; + year2RhvGrandTotalGrowthValue: number; + year3RhvServers?: number; + year3RhvCompSubs?: number; + year3RhvPaidSubs?: number; + year3RhvPerServerValue?: number; + year3RhvTotalValue: number; + year3RhvServersGrowth?: number; + year3RhvCompSubsGrowth?: number; + year3RhvPaidSubsGrowth?: number; + year3RhvPerServerGrowthValue?: number; + year3RhvTotalGrowthValue?: number; + year3RhvGrandTotalGrowthValue: number; } export interface RHVYearByYearCostsModel { - year1RhvGrandTotalValue: number; - year2RhvGrandTotalValue: number; - year3RhvGrandTotalValue: number; - year1RhvBudgetFreedHighValue: number; - year1RhvBudgetFreedLikelyValue: number; - year1RhvBudgetFreedLowValue: number; - year2RhvBudgetFreedHighValue: number; - year2RhvBudgetFreedLikelyValue: number; - year2RhvBudgetFreedLowValue: number; - year3RhvBudgetFreedHighValue: number; - year3RhvBudgetFreedLikelyValue: number; - year3RhvBudgetFreedLowValue: number; + year1RhvGrandTotalValue: number; + year2RhvGrandTotalValue: number; + year3RhvGrandTotalValue: number; + year1RhvBudgetFreedHighValue: number; + year1RhvBudgetFreedLikelyValue: number; + year1RhvBudgetFreedLowValue: number; + year2RhvBudgetFreedHighValue: number; + year2RhvBudgetFreedLikelyValue: number; + year2RhvBudgetFreedLowValue: number; + year3RhvBudgetFreedHighValue: number; + year3RhvBudgetFreedLikelyValue: number; + year3RhvBudgetFreedLowValue: number; } export interface RHVSavingsModel { - rhvSaveHighValue: number; - rhvSaveLikelyValue: number; - rhvSaveLowValue: number; - rhvSaveFromValue: number; - rhvSaveToValue: number; + rhvSaveHighValue: number; + rhvSaveLikelyValue: number; + rhvSaveLowValue: number; + rhvSaveFromValue: number; + rhvSaveToValue: number; } export interface RHVAdditionalContainerCapacityModel { - rhvContainerHigh: number; - rhvContainerLikely: number; - rhvContainerLow: number; - rhvContainerFrom: number; - rhvContainerTo: number; + rhvContainerHigh: number; + rhvContainerLikely: number; + rhvContainerLow: number; + rhvContainerFrom: number; + rhvContainerTo: number; } export interface RHVOrderFormModel { - year1RhvOrderSku: number; - year1RhvOrder: number; - year1RhvOrderConsult: number; - year1RhvOrderTAndE: number; - year1RhvOrderLearningSubs: number; - year1RhvOrderListValue: number; - year1RhvOrderConsultListValue: number; - year1RhvOrderTAndEValue: number; - year1RhvOrderLearningSubsListValue: number; - year1RhvOrderDiscountValue: number; - year1RhvOrderConsultDiscountValue: number; - year1RhvOrderTAndEDiscountValue: number; - year1RhvOrderLearningSubsDiscountValue: number; - year1RhvOrderTotalValue: number; - year1RhvOrderConsultTotalValue: number; - year1RhvOrderTAndETotalValue: number; - year1RhvOrderLearningSubsTotalValue: number; - year1RhvOrderGrandTotal: number; - year2RhvOrderSku: number; - year2RhvOrder: number; - year2RhvOrderListValue: number; - year2RhvOrderDiscountValue: number; - year2RhvOrderTotalValue: number; - year2RhvOrderGrandTotal: number; - year3RhvOrderSku: number; - year3RhvOrder: number; - year3RhvOrderListValue: number; - year3RhvOrderDiscountValue: number; - year3RhvOrderTotalValue: number; - year3RhvOrderGrandTotal: number; + year1RhvOrderSku: number; + year1RhvOrder: number; + year1RhvOrderConsult: number; + year1RhvOrderTAndE: number; + year1RhvOrderLearningSubs: number; + year1RhvOrderListValue: number; + year1RhvOrderConsultListValue: number; + year1RhvOrderTAndEValue: number; + year1RhvOrderLearningSubsListValue: number; + year1RhvOrderDiscountValue: number; + year1RhvOrderConsultDiscountValue: number; + year1RhvOrderTAndEDiscountValue: number; + year1RhvOrderLearningSubsDiscountValue: number; + year1RhvOrderTotalValue: number; + year1RhvOrderConsultTotalValue: number; + year1RhvOrderTAndETotalValue: number; + year1RhvOrderLearningSubsTotalValue: number; + year1RhvOrderGrandTotal: number; + year2RhvOrderSku: number; + year2RhvOrder: number; + year2RhvOrderListValue: number; + year2RhvOrderDiscountValue: number; + year2RhvOrderTotalValue: number; + year2RhvOrderGrandTotal: number; + year3RhvOrderSku: number; + year3RhvOrder: number; + year3RhvOrderListValue: number; + year3RhvOrderDiscountValue: number; + year3RhvOrderTotalValue: number; + year3RhvOrderGrandTotal: number; } export interface ReportWorkloadInventory { - provider: string; - datacenter: string; - cluster: string; - vmName: string; - workloads: string[]; - osName: string; - osDescription: string; - complexity: string; - recommendedTargetsIMS: string[]; - flagsIMS: string[]; - diskSpace: number; - memory: number; - cpuCores: number; - insightsEnabled: boolean; + provider: string; + datacenter: string; + cluster: string; + vmName: string; + workloads: string[]; + osName: string; + osDescription: string; + complexity: string; + recommendedTargetsIMS: string[]; + flagsIMS: string[]; + diskSpace: number; + memory: number; + cpuCores: number; + insightsEnabled: boolean; } export interface WorkloadInventoryReportFiltersModel { - providers: string[]; - datacenters: string[]; - clusters: string[]; - workloads: string[]; - complexities: string[]; - recommendedTargetsIMS: string[]; - flagsIMS: string[]; - osNames: string[]; + providers: string[]; + datacenters: string[]; + clusters: string[]; + workloads: string[]; + complexities: string[]; + recommendedTargetsIMS: string[]; + flagsIMS: string[]; + osNames: string[]; } diff --git a/src/models/Upload.tsx b/src/models/Upload.tsx index 23fdd370..85bbbf8d 100644 --- a/src/models/Upload.tsx +++ b/src/models/Upload.tsx @@ -1,11 +1,11 @@ export interface Upload { - id?: number; - file: File; - reportName: string; - customerId?: string; - reportDescription?: string | null; - yearOverYearGrowthRatePercentage: number; - percentageOfHypervisorsMigratedOnYear1: number; - percentageOfHypervisorsMigratedOnYear2: number; - percentageOfHypervisorsMigratedOnYear3: number; + id?: number; + file: File; + reportName: string; + customerId?: string; + reportDescription?: string | null; + yearOverYearGrowthRatePercentage: number; + percentageOfHypervisorsMigratedOnYear1: number; + percentageOfHypervisorsMigratedOnYear2: number; + percentageOfHypervisorsMigratedOnYear3: number; } diff --git a/src/models/User.tsx b/src/models/User.tsx index e4c13f27..b0ff663a 100644 --- a/src/models/User.tsx +++ b/src/models/User.tsx @@ -1,3 +1,3 @@ export interface User { - firstTimeCreatingReports: boolean; + firstTimeCreatingReports: boolean; } diff --git a/src/models/action/index.tsx b/src/models/action/index.tsx index 446691bb..83d44dcc 100644 --- a/src/models/action/index.tsx +++ b/src/models/action/index.tsx @@ -1,5 +1,5 @@ export interface GenericAction { - type: string; - payload?: any; - meta?: any; + type: string; + payload?: any; + meta?: any; } diff --git a/src/models/router/index.tsx b/src/models/router/index.tsx index 2e344305..09618438 100644 --- a/src/models/router/index.tsx +++ b/src/models/router/index.tsx @@ -1,5 +1,5 @@ export interface RouterGlobalProps { - history: any; - location: any; - match: any; + history: any; + location: any; + match: any; } diff --git a/src/models/state/index.tsx b/src/models/state/index.tsx index 05d704a2..06e0ca2d 100644 --- a/src/models/state/index.tsx +++ b/src/models/state/index.tsx @@ -1,11 +1,11 @@ import { - Report, - ReportWorkloadSummary, - ReportInitialSavingEstimation, - ReportWorkloadInventory, - WorkloadModel, - FlagModel, - WorkloadInventoryReportFiltersModel + Report, + ReportWorkloadSummary, + ReportInitialSavingEstimation, + ReportWorkloadInventory, + WorkloadModel, + FlagModel, + WorkloadInventoryReportFiltersModel, } from '../Report'; import { User } from '../User'; import { FlagAssessmentModel } from '../Mappings'; @@ -15,114 +15,114 @@ import { AxiosError } from 'axios'; * The fields of this interface should match the /store/index.js */ export interface GlobalState { - reportState: ReportState, - uploadState: UploadState, - userState: UserState, - dialogDeleteState: DialogDeleteState, - mappingsState: MappingsState, + reportState: ReportState; + uploadState: UploadState; + userState: UserState; + dialogDeleteState: DialogDeleteState; + mappingsState: MappingsState; } export const enum FetchStatus { - none = 'none', - inProgress = 'inProgress', - complete = 'complete', + none = 'none', + inProgress = 'inProgress', + complete = 'complete', } export interface ObjectFetchStatus { - error: string | null; - status: 'none' | 'inProgress' | 'complete'; + error: string | null; + status: 'none' | 'inProgress' | 'complete'; } export interface ReportState { - report: Report | null; - reportFetchStatus: ObjectFetchStatus; - - reports: { - total: number; - items: Report[]; - }; - reportsFetchStatus: ObjectFetchStatus; - - reportWorkloadSummary: ReportWorkloadSummary | null; - reportWorkloadSummaryFetchStatus: ObjectFetchStatus; - reportWorkloadsDetected: { - total: number; - items: WorkloadModel[] - }; - reportWorkloadsDetectedFetchStatus: ObjectFetchStatus; - reportFlags: { - total: number; - items: FlagModel[] - }; - reportFlagsFetchStatus: ObjectFetchStatus; - - reportInitialSavingEstimation: ReportInitialSavingEstimation | null; - reportInitialSavingEstimationFetchStatus: ObjectFetchStatus; - - reportWorkloadInventory: { - total: number; - items: ReportWorkloadInventory[] - }; - reportWorkloadInventoryFetchStatus: ObjectFetchStatus; - reportWorkloadInventoryAllCSVFetchStatus: ObjectFetchStatus; - reportWorkloadInventoryFilteredCSVFetchStatus: ObjectFetchStatus; - - reportWorkloadInventoryAvailableFilters: WorkloadInventoryReportFiltersModel | null; - reportWorkloadInventoryAvailableFiltersFetchStatus: ObjectFetchStatus; - - reportPayloadDownloadLinkFetchStatus: ObjectFetchStatus; + report: Report | null; + reportFetchStatus: ObjectFetchStatus; + + reports: { + total: number; + items: Report[]; + }; + reportsFetchStatus: ObjectFetchStatus; + + reportWorkloadSummary: ReportWorkloadSummary | null; + reportWorkloadSummaryFetchStatus: ObjectFetchStatus; + reportWorkloadsDetected: { + total: number; + items: WorkloadModel[]; + }; + reportWorkloadsDetectedFetchStatus: ObjectFetchStatus; + reportFlags: { + total: number; + items: FlagModel[]; + }; + reportFlagsFetchStatus: ObjectFetchStatus; + + reportInitialSavingEstimation: ReportInitialSavingEstimation | null; + reportInitialSavingEstimationFetchStatus: ObjectFetchStatus; + + reportWorkloadInventory: { + total: number; + items: ReportWorkloadInventory[]; + }; + reportWorkloadInventoryFetchStatus: ObjectFetchStatus; + reportWorkloadInventoryAllCSVFetchStatus: ObjectFetchStatus; + reportWorkloadInventoryFilteredCSVFetchStatus: ObjectFetchStatus; + + reportWorkloadInventoryAvailableFilters: WorkloadInventoryReportFiltersModel | null; + reportWorkloadInventoryAvailableFiltersFetchStatus: ObjectFetchStatus; + + reportPayloadDownloadLinkFetchStatus: ObjectFetchStatus; } export interface UploadState { - /** - * The file that is been uploaded - */ - file: File | null, - - /** - * True if the upload finished successfully - */ - success: boolean | null, - - /** - * The error message after a failure - */ - error: string | null, - - /** - * The current status of the upload - */ - progress: number, - - /** - * True if the upload started - */ - uploading: boolean + /** + * The file that is been uploaded + */ + file: File | null; + + /** + * True if the upload finished successfully + */ + success: boolean | null; + + /** + * The error message after a failure + */ + error: string | null; + + /** + * The current status of the upload + */ + progress: number; + + /** + * True if the upload started + */ + uploading: boolean; } export interface UserState { - user: User | null; - userFetchStatus: ObjectFetchStatus; + user: User | null; + userFetchStatus: ObjectFetchStatus; } export type DialogDeleteState = Readonly<{ - isOpen: boolean; - isProcessing: boolean; - isError: boolean; - name: string; - type: string; - onDelete: () => void; - onCancel: () => void; + isOpen: boolean; + isProcessing: boolean; + isError: boolean; + name: string; + type: string; + onDelete: () => void; + onCancel: () => void; }>; export interface FlagAssessmentState { - byFlag: Map; - fetchStatus: Map; - errors: Map; - allFlags: FlagAssessmentModel[]; - allFlagsFetchStatus: ObjectFetchStatus; -}; + byFlag: Map; + fetchStatus: Map; + errors: Map; + allFlags: FlagAssessmentModel[]; + allFlagsFetchStatus: ObjectFetchStatus; +} export interface MappingsState { - flagAssessment: FlagAssessmentState; + flagAssessment: FlagAssessmentState; } diff --git a/src/pages/ErrorPage/ErrorPage.test.tsx b/src/pages/ErrorPage/ErrorPage.test.tsx index cc2f989f..f36d265a 100644 --- a/src/pages/ErrorPage/ErrorPage.test.tsx +++ b/src/pages/ErrorPage/ErrorPage.test.tsx @@ -1,14 +1,10 @@ -import React from "react"; -import { shallow } from "enzyme"; -import ErrorPage from "./ErrorPage"; +import React from 'react'; +import { shallow } from 'enzyme'; +import ErrorPage from './ErrorPage'; -describe("ErrorPage", () => { - - it("expect to render", () => { - const wrapper = shallow( - - ); +describe('ErrorPage', () => { + it('expect to render', () => { + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/pages/ErrorPage/ErrorPage.tsx b/src/pages/ErrorPage/ErrorPage.tsx index 94bf3980..a0a4e1e1 100644 --- a/src/pages/ErrorPage/ErrorPage.tsx +++ b/src/pages/ErrorPage/ErrorPage.tsx @@ -1,61 +1,44 @@ import React from 'react'; import { Link } from 'react-router-dom'; import { - Bullseye, - EmptyState, - EmptyStateVariant, - EmptyStateIcon, - Title, - EmptyStateBody + Bullseye, + EmptyState, + EmptyStateVariant, + EmptyStateIcon, + Title, + EmptyStateBody, } from '@patternfly/react-core'; import { ErrorCircleOIcon } from '@patternfly/react-icons'; import { - PageHeader, - PageHeaderTitle + PageHeader, + PageHeaderTitle, } from '@redhat-cloud-services/frontend-components/components/PageHeader'; -import { - Main -} from '@redhat-cloud-services/frontend-components/components/Main'; - -interface StateToProps {} - -interface DispatchToProps {} - -interface Props extends StateToProps, DispatchToProps { -}; - -interface State { -}; - -class ErrorPage extends React.Component { - - constructor(props: Props) { - super(props); - } - - public render() { - return ( - - - - -
- - - - - Error - - - Something unexpected happened, please try again! - - Home - - -
-
- ); - } +import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; + +class ErrorPage extends React.Component { + public render() { + return ( + + + + +
+ + + + + Error + + Something unexpected happened, please try again! + + Home + + + +
+
+ ); + } } export default ErrorPage; diff --git a/src/pages/GettingStarted/GettingStarted.scss b/src/pages/GettingStarted/GettingStarted.scss index bf499947..16d2ced9 100644 --- a/src/pages/GettingStarted/GettingStarted.scss +++ b/src/pages/GettingStarted/GettingStarted.scss @@ -1,3 +1,3 @@ .pf-c-empty-state > .dropzone { - margin-top: var(--pf-c-empty-state--c-button--MarginTop); -} \ No newline at end of file + margin-top: var(--pf-c-empty-state--c-button--MarginTop); +} diff --git a/src/pages/GettingStarted/GettingStarted.test.tsx b/src/pages/GettingStarted/GettingStarted.test.tsx index a4d59031..d6cb3450 100644 --- a/src/pages/GettingStarted/GettingStarted.test.tsx +++ b/src/pages/GettingStarted/GettingStarted.test.tsx @@ -1,41 +1,35 @@ -import React from "react"; -import { shallow } from "enzyme"; -import GettingStarted, { Props } from "./GettingStarted"; +import React from 'react'; +import { shallow } from 'enzyme'; +import GettingStarted, { Props } from './GettingStarted'; const baseProps: Props = { user: { - firstTimeCreatingReports: true - } + firstTimeCreatingReports: true, + }, }; -describe("GettingStarted", () => { - - it("expect to render", () => { +describe('GettingStarted', () => { + it('expect to render', () => { const props = { - ...baseProps + ...baseProps, }; - const wrapper = shallow( - - ); - + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); }); - it("expect to redirect", () => { + it('expect to redirect', () => { const props = { ...baseProps, user: { ...baseProps.user, - firstTimeCreatingReports: false - } + firstTimeCreatingReports: false, + }, }; - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/pages/GettingStarted/GettingStarted.tsx b/src/pages/GettingStarted/GettingStarted.tsx index 3347cb41..86649d66 100644 --- a/src/pages/GettingStarted/GettingStarted.tsx +++ b/src/pages/GettingStarted/GettingStarted.tsx @@ -1,11 +1,11 @@ import React from 'react'; import { Redirect, Link } from 'react-router-dom'; import { - EmptyStateBody, - EmptyState, - Title, - Bullseye, - EmptyStateVariant + EmptyStateBody, + EmptyState, + Title, + Bullseye, + EmptyStateVariant, } from '@patternfly/react-core'; import { User } from '../../models'; import ProcessImprovementSvg from '../../PresentationalComponents/Icons/process-improvement_svg'; @@ -13,53 +13,53 @@ import ReportsPage from '../../PresentationalComponents/ReportsPage/ReportsPage' import './GettingStarted.scss'; interface StateToProps { - user: User | null; + user: User | null; } -interface DispatchToProps { -} - -export interface Props extends StateToProps, DispatchToProps { -}; +export type Props = StateToProps; -interface State { -}; +class GettingStarted extends React.Component { + constructor(props: Props) { + super(props); + } -class GettingStarted extends React.Component { + public render() { + const { user } = this.props; - constructor(props: Props) { - super(props); + if (user && !user.firstTimeCreatingReports) { + return ; } - public render() { - const { user } = this.props; - - if (user && !user.firstTimeCreatingReports) { - return ; - } - - return ( - - - -
- -
- Let Red Hat Migration Analytics suggest ways to optimize your environment - - See how you can optimize your virtual environment
- by uploading a Red Hat CloudForms generated Inventory file
- and then letting Red Hat Migration Analytics create reports
- showing how you can save money and optimize workloads
- whether by migrating virtual machines or
- migrating applications to Red Hat Enterprise Linux. -
- Get Started -
-
-
- ); - } + return ( + + + +
+ +
+ + Let Red Hat Migration Analytics suggest ways to optimize your environment + + + See how you can optimize your virtual environment
+ by uploading a Red Hat CloudForms generated Inventory file
+ and then letting Red Hat Migration Analytics create reports
+ showing how you can save money and optimize workloads
+ whether by migrating virtual machines or
+ migrating applications to Red Hat Enterprise Linux. +
+ + Get Started + +
+
+
+ ); + } } export default GettingStarted; diff --git a/src/pages/GettingStarted/index.tsx b/src/pages/GettingStarted/index.tsx index 489e9396..790c08ba 100644 --- a/src/pages/GettingStarted/index.tsx +++ b/src/pages/GettingStarted/index.tsx @@ -3,20 +3,14 @@ import GettingStarted from './GettingStarted'; import { connect } from 'react-redux'; const mapStateToProps = (state: GlobalState) => { - const { - userState: { - user - } - } = state; - return { - user - }; + const { + userState: { user }, + } = state; + return { + user, + }; }; -const mapDispatchToProps = { -}; +const mapDispatchToProps = {}; -export default connect( - mapStateToProps, - mapDispatchToProps -)(GettingStarted); +export default connect(mapStateToProps, mapDispatchToProps)(GettingStarted); diff --git a/src/pages/NoReports/NoReports.test.tsx b/src/pages/NoReports/NoReports.test.tsx index fd3d3d9c..76bc442b 100644 --- a/src/pages/NoReports/NoReports.test.tsx +++ b/src/pages/NoReports/NoReports.test.tsx @@ -1,41 +1,35 @@ -import React from "react"; -import { shallow } from "enzyme"; -import NoReports, { Props } from "./NoReports"; +import React from 'react'; +import { shallow } from 'enzyme'; +import NoReports, { Props } from './NoReports'; const baseProps: Props = { user: { - firstTimeCreatingReports: false - } + firstTimeCreatingReports: false, + }, }; -describe("NoReports", () => { - - it("expect to render", () => { +describe('NoReports', () => { + it('expect to render', () => { const props = { - ...baseProps + ...baseProps, }; - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to redirect", () => { + it('expect to redirect', () => { const props = { ...baseProps, user: { ...baseProps.user, - firstTimeCreatingReports: true - } + firstTimeCreatingReports: true, + }, }; - const wrapper = shallow( - - ); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - }); diff --git a/src/pages/NoReports/NoReports.tsx b/src/pages/NoReports/NoReports.tsx index c541c2f3..ed2a85a0 100644 --- a/src/pages/NoReports/NoReports.tsx +++ b/src/pages/NoReports/NoReports.tsx @@ -1,60 +1,55 @@ import React from 'react'; import { Link, Redirect } from 'react-router-dom'; import { - EmptyState, - EmptyStateVariant, - EmptyStateIcon, - Title, - EmptyStateBody, - Bullseye + EmptyState, + EmptyStateVariant, + EmptyStateIcon, + Title, + EmptyStateBody, + Bullseye, } from '@patternfly/react-core'; -import { - AddCircleOIcon -} from '@patternfly/react-icons'; +import { AddCircleOIcon } from '@patternfly/react-icons'; import { User } from '../../models'; import ReportsPage from '../../PresentationalComponents/ReportsPage'; interface StateToProps { - user: User | null; -} - -interface DispatchToProps { + user: User | null; } -export interface Props extends StateToProps, DispatchToProps { -}; +export type Props = StateToProps; -interface State { -}; +class NoReports extends React.Component { + constructor(props: Props) { + super(props); + } -class NoReports extends React.Component { + public render() { + const { user } = this.props; - constructor(props: Props) { - super(props); + if (user && user.firstTimeCreatingReports) { + return ; } - public render() { - const { user } = this.props; - - if (user && user.firstTimeCreatingReports) { - return ; - } - - return ( - - - - - No reports found - - Reports are created from inventory data files that are uploaded to Red Hat Migration Analytics. - - Create report - - - - ); - } + return ( + + + + + + No reports found + + + Reports are created from inventory data files that are uploaded to Red Hat Migration + Analytics. + + + Create report + + + + + ); + } } export default NoReports; diff --git a/src/pages/NoReports/index.tsx b/src/pages/NoReports/index.tsx index 4568d383..a5914fe9 100644 --- a/src/pages/NoReports/index.tsx +++ b/src/pages/NoReports/index.tsx @@ -2,21 +2,15 @@ import { connect } from 'react-redux'; import NoReports from './NoReports'; import { GlobalState } from '../../models/state'; -const mapStateToProps = (state: GlobalState) => { - const { - userState: { - user - } - } = state; - return { - user - }; +const mapStateToProps = (state: GlobalState) => { + const { + userState: { user }, + } = state; + return { + user, + }; }; -const mapDispatchToProps = { -}; +const mapDispatchToProps = {}; -export default connect( - mapStateToProps, - mapDispatchToProps -)(NoReports); +export default connect(mapStateToProps, mapDispatchToProps)(NoReports); diff --git a/src/pages/ReportView/InitialSavingsEstimation/InitialSavingsEstimation.tsx b/src/pages/ReportView/InitialSavingsEstimation/InitialSavingsEstimation.tsx index a3a6a6e7..c68df216 100644 --- a/src/pages/ReportView/InitialSavingsEstimation/InitialSavingsEstimation.tsx +++ b/src/pages/ReportView/InitialSavingsEstimation/InitialSavingsEstimation.tsx @@ -1,34 +1,30 @@ import React from 'react'; import { - Card, - CardBody, - CardHeader, - Stack, - StackItem, - Bullseye, - EmptyState, - EmptyStateVariant, - EmptyStateIcon, - Title, - EmptyStateBody, - Button, - Tooltip, - Grid + Card, + CardBody, + CardHeader, + Stack, + StackItem, + Bullseye, + EmptyState, + EmptyStateVariant, + EmptyStateIcon, + Title, + EmptyStateBody, + Button, + Tooltip, + Grid, } from '@patternfly/react-core'; import { ErrorCircleOIcon, HelpIcon } from '@patternfly/react-icons'; import { - ChartAxisProps, - ChartLegendProps, - ChartProps, - ChartGroupProps, - ChartBarProps + ChartAxisProps, + ChartLegendProps, + ChartProps, + ChartGroupProps, + ChartBarProps, } from '@patternfly/react-charts'; -import { - Skeleton -} from '@redhat-cloud-services/frontend-components/components/Skeleton'; -import { - SkeletonTable -} from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; +import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import { SkeletonTable } from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; import { Report, ReportInitialSavingEstimation } from '../../../models'; import { formatValue } from '../../../Utilities/formatValue'; @@ -44,523 +40,567 @@ import { ObjectFetchStatus } from '../../../models/state'; import { FancyChartDonutData } from '../../../PresentationalComponents/FancyChartDonut/FancyChartDonut'; interface StateToProps { - report: Report | null; - reportInitialSavingEstimation: ReportInitialSavingEstimation | null; - reportInitialSavingEstimationFetchStatus: ObjectFetchStatus; + report: Report | null; + reportInitialSavingEstimation: ReportInitialSavingEstimation | null; + reportInitialSavingEstimationFetchStatus: ObjectFetchStatus; } interface DispatchToProps { - fetchReportInitialSavingEstimation: (reportId: number) => any; + fetchReportInitialSavingEstimation: (reportId: number) => any; } interface Props extends StateToProps, DispatchToProps { - reportId: number; -}; - -interface State { -}; + reportId: number; +} const sumReducer = (a: number, b: number): number => a + b; -class InitialSavingsEstimation extends React.Component { +class InitialSavingsEstimation extends React.Component { + constructor(props: Props) { + super(props); + } - constructor(props: Props) { - super(props); - } + public componentDidMount() { + this.refreshData(); + } - public componentDidMount() { - this.refreshData(); + public refreshData = () => { + const { reportId, fetchReportInitialSavingEstimation } = this.props; + fetchReportInitialSavingEstimation(reportId); + }; + + public renderErrorCard = (title: any) => { + return There is no enough data to render this card.; + }; + + public renderInfo = () => { + const { reportInitialSavingEstimation } = this.props; + const title = + 'Over 3 year(s) with Red Hat Virtualization, your initial savings estimation could be as much as:'; + + if (!reportInitialSavingEstimation) { + return this.renderErrorCard(title); } - public refreshData = () => { - const { reportId, fetchReportInitialSavingEstimation } = this.props; - fetchReportInitialSavingEstimation(reportId); - }; + return ( + +

+ + {formatValue(reportInitialSavingEstimation.rhvSavingsModel.rhvSaveHighValue, 'usd', { + fractionDigits: 0, + })} + +

+
+ ); + }; + + public renderCostExpenditureComparison = () => { + const { reportInitialSavingEstimation } = this.props; + const title = 'Cost expenditure comparison during the 3 year migration'; + + if (!reportInitialSavingEstimation) { + return this.renderErrorCard(title); + } - public renderErrorCard = (title: any) => { - return ( - - There is no enough data to render this card. - - ); + const sourceRampDownCostsModel = reportInitialSavingEstimation.sourceRampDownCostsModel; + const rhvRampUpCostsModel = reportInitialSavingEstimation.rhvRampUpCostsModel; + + // VMware values + const vmwareCostsYear1 = sourceRampDownCostsModel.year1SourceMaintenanceTotalValue; + const vmwareCostsYear2 = sourceRampDownCostsModel.year2SourceMaintenanceTotalValue; + const vmwareCostsYear3 = sourceRampDownCostsModel.year3SourceMaintenanceTotalValue; + + // RHV values + const rhvCostsYear1 = + rhvRampUpCostsModel.year1RhvGrandTotalGrowthValue + + rhvRampUpCostsModel.rhvSwitchLearningSubsValue; + const rhvCostsYear2 = rhvRampUpCostsModel.year2RhvGrandTotalGrowthValue; + const rhvCostsYear3 = rhvRampUpCostsModel.year3RhvGrandTotalGrowthValue; + + // Chart config + const legendProps: ChartLegendProps = { height: 20, x: 130 }; + const chartProps: ChartProps = { + width: 650, + height: 300, + domainPadding: { + x: 110, + y: 0, + }, + padding: { left: 110, right: 20, bottom: 30, top: 0 }, }; - - public renderInfo = () => { - const { reportInitialSavingEstimation } = this.props; - const title = "Over 3 year(s) with Red Hat Virtualization, your initial savings estimation could be as much as:"; - - if (!reportInitialSavingEstimation) { - return this.renderErrorCard(title); - } - - return ( - -

- - { formatValue(reportInitialSavingEstimation.rhvSavingsModel.rhvSaveHighValue, 'usd', { fractionDigits: 0 }) } - -

-
- ); + const chartGroupProps: ChartGroupProps = { offset: 50 }; + const chartBarProps: ChartBarProps = { barWidth: 50 }; + + const barChartData: FancyGroupedBarChartData = { + legends: ['VMware costs', 'Red Hat Virtualization costs'], + colors: undefined, + values: [ + [ + { + x: '1', + y: vmwareCostsYear1, + label: formatValue(vmwareCostsYear1, 'usd', { fractionDigits: 0 }), + }, + { + x: '2', + y: vmwareCostsYear2, + label: formatValue(vmwareCostsYear2, 'usd', { fractionDigits: 0 }), + }, + { + x: '3', + y: vmwareCostsYear3, + label: formatValue(vmwareCostsYear3, 'usd', { fractionDigits: 0 }), + }, + ], + [ + { + x: '1', + y: rhvCostsYear1, + label: formatValue(rhvCostsYear1, 'usd', { fractionDigits: 0 }), + }, + { + x: '2', + y: rhvCostsYear2, + label: formatValue(rhvCostsYear2, 'usd', { fractionDigits: 0 }), + }, + { + x: '3', + y: rhvCostsYear3, + label: formatValue(rhvCostsYear3, 'usd', { fractionDigits: 0 }), + }, + ], + ], }; - public renderCostExpenditureComparison = () => { - const { reportInitialSavingEstimation } = this.props; - const title = "Cost expenditure comparison during the 3 year migration"; - - if (!reportInitialSavingEstimation) { - return this.renderErrorCard(title); - } - - const sourceRampDownCostsModel = reportInitialSavingEstimation.sourceRampDownCostsModel; - const rhvRampUpCostsModel = reportInitialSavingEstimation.rhvRampUpCostsModel; - - // VMware values - const vmwareCostsYear1 = sourceRampDownCostsModel.year1SourceMaintenanceTotalValue; - const vmwareCostsYear2 = sourceRampDownCostsModel.year2SourceMaintenanceTotalValue; - const vmwareCostsYear3 = sourceRampDownCostsModel.year3SourceMaintenanceTotalValue; - - // RHV values - const rhvCostsYear1 = rhvRampUpCostsModel.year1RhvGrandTotalGrowthValue + rhvRampUpCostsModel.rhvSwitchLearningSubsValue; - const rhvCostsYear2 = rhvRampUpCostsModel.year2RhvGrandTotalGrowthValue; - const rhvCostsYear3 = rhvRampUpCostsModel.year3RhvGrandTotalGrowthValue; - - // Chart config - const legendProps: ChartLegendProps = { height: 20, x: 130 }; - const chartProps: ChartProps = { - width: 650, - height: 300, - domainPadding: { - x: 110, - y: 0 - }, - padding: { left: 110, right: 20, bottom: 30, top: 0 } - }; - const chartGroupProps: ChartGroupProps = { offset: 50 }; - const chartBarProps: ChartBarProps = { barWidth: 50 }; - - const barChartData: FancyGroupedBarChartData = { - legends: [ 'VMware costs', 'Red Hat Virtualization costs' ], - colors: undefined, - values: [ - [ - { x: '1', y: vmwareCostsYear1, label: formatValue(vmwareCostsYear1, 'usd', { fractionDigits: 0 }) }, - { x: '2', y: vmwareCostsYear2, label: formatValue(vmwareCostsYear2, 'usd', { fractionDigits: 0 }) }, - { x: '3', y: vmwareCostsYear3, label: formatValue(vmwareCostsYear3, 'usd', { fractionDigits: 0 }) } - ], - [ - { x: '1', y: rhvCostsYear1, label: formatValue(rhvCostsYear1, 'usd', { fractionDigits: 0 }) }, - { x: '2', y: rhvCostsYear2, label: formatValue(rhvCostsYear2, 'usd', { fractionDigits: 0 }) }, - { x: '3', y: rhvCostsYear3, label: formatValue(rhvCostsYear3, 'usd', { fractionDigits: 0 }) } - ] - ] - }; - - const dependentChartAxisProps: ChartAxisProps = { - tickFormat: (tick: any) => `${formatValue(tick, 'usd', { fractionDigits: 0 })}` - }; - - const footer = ( -
- Year -
- ); - - return ( - - - - ); + const dependentChartAxisProps: ChartAxisProps = { + tickFormat: (tick: any) => `${formatValue(tick, 'usd', { fractionDigits: 0 })}`, }; - public renderEnvironment = () => { - const { reportInitialSavingEstimation } = this.props; - const title = "Environment"; - - if (!reportInitialSavingEstimation) { - return this.renderErrorCard(title); - } - - return ( - - - - ); - }; + const footer = ( +
+ Year +
+ ); + + return ( + + + + ); + }; + + public renderEnvironment = () => { + const { reportInitialSavingEstimation } = this.props; + const title = 'Environment'; + + if (!reportInitialSavingEstimation) { + return this.renderErrorCard(title); + } - public renderRenewalEstimation = () => { - const { reportInitialSavingEstimation } = this.props; - const title = "VMware ELA renewal estimation"; + return ( + + + + ); + }; - if (!reportInitialSavingEstimation) { - return this.renderErrorCard(title); - } + public renderRenewalEstimation = () => { + const { reportInitialSavingEstimation } = this.props; + const title = 'VMware ELA renewal estimation'; - return ( - - - - ); - }; + if (!reportInitialSavingEstimation) { + return this.renderErrorCard(title); + } - public renderTotalMaintenance = () => { - const { reportInitialSavingEstimation } = this.props; - const title = ( - Total costs during 3 years migration - - Includes VMware maintenance, Red Hat Virtualization subscriptions, training and services - } - > - - - - ); - - if (!reportInitialSavingEstimation) { - return this.renderErrorCard(title); - } - - const sourceRampDownCostsModel = reportInitialSavingEstimation.sourceRampDownCostsModel; - const rhvRampUpCostsModel = reportInitialSavingEstimation.rhvRampUpCostsModel; - - const vmwareTotal = [ - sourceRampDownCostsModel.year1SourceMaintenanceTotalValue, - sourceRampDownCostsModel.year2SourceMaintenanceTotalValue, - sourceRampDownCostsModel.year3SourceMaintenanceTotalValue - ].reduce(sumReducer, 0); - - const rhvHypervisorsTotal = [ - rhvRampUpCostsModel.year1RhvTotalValue, - rhvRampUpCostsModel.year2RhvTotalValue, - rhvRampUpCostsModel.year3RhvTotalValue - ].reduce(sumReducer, 0); - - const rhvGrowthTotal = [ - (rhvRampUpCostsModel.year1RhvTotalGrowthValue || 0), - (rhvRampUpCostsModel.year2RhvTotalGrowthValue || 0), - (rhvRampUpCostsModel.year3RhvTotalGrowthValue || 0) - ].reduce(sumReducer, 0); - - const rhTrainingTotal = rhvRampUpCostsModel.rhvSwitchLearningSubsValue; - const rhConsultingTotal = rhvRampUpCostsModel.rhvSwitchConsultValue; - const rhTravelAndLodgingTotal = rhvRampUpCostsModel.rhvSwitchTAndEValue; - - // - const pieValues = [ - vmwareTotal, - rhvHypervisorsTotal, - rhvGrowthTotal, - rhTrainingTotal, - rhConsultingTotal, - rhTravelAndLodgingTotal - ]; - const total = pieValues.reduce(sumReducer, 0); - const percentages = pieValues.map((val) => ((val / total) * 100)); - - const chartProps = { - title: formatValue(total, 'usd', { fractionDigits: 0 }), - height: 240, - width: 620, - padding: { - bottom: 20, - left: 20, - right: 200, - top: 20 + return ( + + + + ); + }; + + public renderTotalMaintenance = () => { + const { reportInitialSavingEstimation } = this.props; + const title = ( + + Total costs during 3 years migration + + + Includes VMware maintenance, Red Hat Virtualization subscriptions, training and + services + } - }; - - const chartData: FancyChartDonutData[] = [ - { label: 'VMware', value: percentages[0] }, - { label: 'Red Hat Virtualization hosts', value: percentages[1] }, - { label: 'Red Hat Virtualization growth', value: percentages[2] }, - { label: 'Red Hat training', value: percentages[3] }, - { label: 'Red Hat consulting', value: percentages[4] }, - { label: 'Travel and lodging', value: percentages[5] } - ]; - - const tickFormat = (label: string, value: number) => `${label}: ${value.toFixed(2)}%`; - const tooltipFormat = ({datum}) => `${datum.x} \n ${datum.y.toFixed(2)}%`; - - return ( - - - - ); - }; + > + + + + + ); + + if (!reportInitialSavingEstimation) { + return this.renderErrorCard(title); + } - public renderProjectCostBreakdown = () => { - const { reportInitialSavingEstimation } = this.props; - const title = "Project cost breakdown"; - - if (!reportInitialSavingEstimation) { - return this.renderErrorCard(title); - } - - const sourceRampDownCostsModel = reportInitialSavingEstimation.sourceRampDownCostsModel; - const rhvRampUpCostsModel = reportInitialSavingEstimation.rhvRampUpCostsModel; - - // Bar chart values - const vmwareTotal = [ - sourceRampDownCostsModel.year1SourceMaintenanceTotalValue, - sourceRampDownCostsModel.year2SourceMaintenanceTotalValue, - sourceRampDownCostsModel.year3SourceMaintenanceTotalValue - ].reduce(sumReducer, 0); - - const rhvHypervisorsTotal = [ - rhvRampUpCostsModel.year1RhvTotalValue, - rhvRampUpCostsModel.year2RhvTotalValue, - rhvRampUpCostsModel.year3RhvTotalValue - ].reduce(sumReducer, 0); - - const rhvGrowthTotal = [ - rhvRampUpCostsModel.year1RhvTotalGrowthValue || 0, - rhvRampUpCostsModel.year2RhvTotalGrowthValue || 0, - rhvRampUpCostsModel.year3RhvTotalGrowthValue || 0 - ].reduce(sumReducer, 0); - - const rhTrainingTotal = rhvRampUpCostsModel.rhvSwitchLearningSubsValue; - const rhConsultingTotal = rhvRampUpCostsModel.rhvSwitchConsultValue; - const rhTravelAndLodgingTotal = rhvRampUpCostsModel.rhvSwitchTAndEValue; - - // Chart config - const chartProps: ChartProps = { - width: 650, - height: 400, - domainPadding: { - x: 50, - y: 30 - }, - padding: { left: 110, right: 0, bottom: 170, top: 0 } - }; - const chartGroupProps: ChartGroupProps = { offset: 0 }; - const chartBarProps: ChartBarProps = { barWidth: 50 }; - - const barChartData: FancyGroupedBarChartData = { - legends: undefined, - colors: undefined, - values: [ - [{ x: 'VMware', y: vmwareTotal, label: formatValue(vmwareTotal, 'usd', { fractionDigits: 0 }) }], - [{ x: 'Red Hat Virtualization hosts', y: rhvHypervisorsTotal, label: formatValue(rhvHypervisorsTotal, 'usd', { fractionDigits: 0 }) }], - [{ x: 'Red Hat Virtualization growth', y: rhvGrowthTotal, label: formatValue(rhvGrowthTotal, 'usd', { fractionDigits: 0 }) }], - [{ x: 'Red Hat training', y: rhTrainingTotal, label: formatValue(rhTrainingTotal, 'usd', { fractionDigits: 0 }) }], - [{ x: 'Red Hat consulting', y: rhConsultingTotal, label: formatValue(rhConsultingTotal, 'usd', { fractionDigits: 0 }) }], - [{ x: 'Travel and lodging', y: rhTravelAndLodgingTotal, label: formatValue(rhTravelAndLodgingTotal, 'usd', { fractionDigits: 0 }) }] - ] - }; - - const tickLabels = { - angle: -45, - padding: 1, - textAnchor: 'end' - }; - const independentChartAxisProps: ChartAxisProps = { - style: { - tickLabels - } - }; - - const dependentChartAxisProps: ChartAxisProps = { - tickFormat: (tick: any) => `${formatValue(tick, 'usd', { fractionDigits: 0 })}` - }; - - const footer = ( -
- Migration cost breakdown -
- ); - - return ( - - - - ); + const sourceRampDownCostsModel = reportInitialSavingEstimation.sourceRampDownCostsModel; + const rhvRampUpCostsModel = reportInitialSavingEstimation.rhvRampUpCostsModel; + + const vmwareTotal = [ + sourceRampDownCostsModel.year1SourceMaintenanceTotalValue, + sourceRampDownCostsModel.year2SourceMaintenanceTotalValue, + sourceRampDownCostsModel.year3SourceMaintenanceTotalValue, + ].reduce(sumReducer, 0); + + const rhvHypervisorsTotal = [ + rhvRampUpCostsModel.year1RhvTotalValue, + rhvRampUpCostsModel.year2RhvTotalValue, + rhvRampUpCostsModel.year3RhvTotalValue, + ].reduce(sumReducer, 0); + + const rhvGrowthTotal = [ + rhvRampUpCostsModel.year1RhvTotalGrowthValue || 0, + rhvRampUpCostsModel.year2RhvTotalGrowthValue || 0, + rhvRampUpCostsModel.year3RhvTotalGrowthValue || 0, + ].reduce(sumReducer, 0); + + const rhTrainingTotal = rhvRampUpCostsModel.rhvSwitchLearningSubsValue; + const rhConsultingTotal = rhvRampUpCostsModel.rhvSwitchConsultValue; + const rhTravelAndLodgingTotal = rhvRampUpCostsModel.rhvSwitchTAndEValue; + + // + const pieValues = [ + vmwareTotal, + rhvHypervisorsTotal, + rhvGrowthTotal, + rhTrainingTotal, + rhConsultingTotal, + rhTravelAndLodgingTotal, + ]; + const total = pieValues.reduce(sumReducer, 0); + const percentages = pieValues.map((val) => (val / total) * 100); + + const chartProps = { + title: formatValue(total, 'usd', { fractionDigits: 0 }), + height: 240, + width: 620, + padding: { + bottom: 20, + left: 20, + right: 200, + top: 20, + }, }; - public renderProjectCostBreakdownTable = () => { - const { reportInitialSavingEstimation } = this.props; - const title = "Project cost breakdown"; - - if (!reportInitialSavingEstimation) { - return this.renderErrorCard(title); - } + const chartData: FancyChartDonutData[] = [ + { label: 'VMware', value: percentages[0] }, + { label: 'Red Hat Virtualization hosts', value: percentages[1] }, + { label: 'Red Hat Virtualization growth', value: percentages[2] }, + { label: 'Red Hat training', value: percentages[3] }, + { label: 'Red Hat consulting', value: percentages[4] }, + { label: 'Travel and lodging', value: percentages[5] }, + ]; + + const tickFormat = (label: string, value: number) => `${label}: ${value.toFixed(2)}%`; + const tooltipFormat = ({ datum }) => `${datum.x} \n ${datum.y.toFixed(2)}%`; + + return ( + + + + ); + }; + + public renderProjectCostBreakdown = () => { + const { reportInitialSavingEstimation } = this.props; + const title = 'Project cost breakdown'; + + if (!reportInitialSavingEstimation) { + return this.renderErrorCard(title); + } - return ( - - - - ); + const sourceRampDownCostsModel = reportInitialSavingEstimation.sourceRampDownCostsModel; + const rhvRampUpCostsModel = reportInitialSavingEstimation.rhvRampUpCostsModel; + + // Bar chart values + const vmwareTotal = [ + sourceRampDownCostsModel.year1SourceMaintenanceTotalValue, + sourceRampDownCostsModel.year2SourceMaintenanceTotalValue, + sourceRampDownCostsModel.year3SourceMaintenanceTotalValue, + ].reduce(sumReducer, 0); + + const rhvHypervisorsTotal = [ + rhvRampUpCostsModel.year1RhvTotalValue, + rhvRampUpCostsModel.year2RhvTotalValue, + rhvRampUpCostsModel.year3RhvTotalValue, + ].reduce(sumReducer, 0); + + const rhvGrowthTotal = [ + rhvRampUpCostsModel.year1RhvTotalGrowthValue || 0, + rhvRampUpCostsModel.year2RhvTotalGrowthValue || 0, + rhvRampUpCostsModel.year3RhvTotalGrowthValue || 0, + ].reduce(sumReducer, 0); + + const rhTrainingTotal = rhvRampUpCostsModel.rhvSwitchLearningSubsValue; + const rhConsultingTotal = rhvRampUpCostsModel.rhvSwitchConsultValue; + const rhTravelAndLodgingTotal = rhvRampUpCostsModel.rhvSwitchTAndEValue; + + // Chart config + const chartProps: ChartProps = { + width: 650, + height: 400, + domainPadding: { + x: 50, + y: 30, + }, + padding: { left: 110, right: 0, bottom: 170, top: 0 }, }; - - public renderReports = () => { - return ( - - - - { this.renderInfo() } - - - {/* Use Grid without GridItem to fill the height of panel */} - - { this.renderCostExpenditureComparison() } - { this.renderEnvironment() } - - - - - { this.renderTotalMaintenance() } - { this.renderRenewalEstimation() } - - - - - { this.renderProjectCostBreakdown() } - { this.renderProjectCostBreakdownTable() } - - - - - Disclaimer - -

- This website does not constitute an offer to sell, a solicitation of an offer to buy, - or a recommendation of any security or any other product or service by Red Hat, Inc. - or any other third party regardless of whether such product or service is referenced - in this report. -

-
-
-
-
-
- ); + const chartGroupProps: ChartGroupProps = { offset: 0 }; + const chartBarProps: ChartBarProps = { barWidth: 50 }; + + const barChartData: FancyGroupedBarChartData = { + legends: undefined, + colors: undefined, + values: [ + [ + { + x: 'VMware', + y: vmwareTotal, + label: formatValue(vmwareTotal, 'usd', { fractionDigits: 0 }), + }, + ], + [ + { + x: 'Red Hat Virtualization hosts', + y: rhvHypervisorsTotal, + label: formatValue(rhvHypervisorsTotal, 'usd', { fractionDigits: 0 }), + }, + ], + [ + { + x: 'Red Hat Virtualization growth', + y: rhvGrowthTotal, + label: formatValue(rhvGrowthTotal, 'usd', { fractionDigits: 0 }), + }, + ], + [ + { + x: 'Red Hat training', + y: rhTrainingTotal, + label: formatValue(rhTrainingTotal, 'usd', { fractionDigits: 0 }), + }, + ], + [ + { + x: 'Red Hat consulting', + y: rhConsultingTotal, + label: formatValue(rhConsultingTotal, 'usd', { fractionDigits: 0 }), + }, + ], + [ + { + x: 'Travel and lodging', + y: rhTravelAndLodgingTotal, + label: formatValue(rhTravelAndLodgingTotal, 'usd', { fractionDigits: 0 }), + }, + ], + ], }; - public renderReportsSkeleton = () => { - return ( - - - - } - skipBullseye={ true } - > - - - - - - - - - - } - > - - - } - > - - - - - - - } - > - - - } - > - - - - - - - } - > - - - } - > - - - - - - - ); + const tickLabels = { + angle: -45, + padding: 1, + textAnchor: 'end', }; - - public renderFetchError = () => { - return ( - - - - - Error - - - Something unexpected happend, please try again! - - - - - ); + const independentChartAxisProps: ChartAxisProps = { + style: { + tickLabels, + }, }; - public render() { - const { reportInitialSavingEstimation, reportInitialSavingEstimationFetchStatus } = this.props; - - const isFetchComplete: boolean = reportInitialSavingEstimationFetchStatus.status === 'complete'; + const dependentChartAxisProps: ChartAxisProps = { + tickFormat: (tick: any) => `${formatValue(tick, 'usd', { fractionDigits: 0 })}`, + }; - if (reportInitialSavingEstimationFetchStatus.error || (isFetchComplete && !reportInitialSavingEstimation)) { - return this.renderFetchError(); - } + const footer = ( +
+ Migration cost breakdown +
+ ); + + return ( + + + + ); + }; + + public renderProjectCostBreakdownTable = () => { + const { reportInitialSavingEstimation } = this.props; + const title = 'Project cost breakdown'; + + if (!reportInitialSavingEstimation) { + return this.renderErrorCard(title); + } - return ( - - { isFetchComplete ? this.renderReports() : this.renderReportsSkeleton() } - - ); + return ( + + + + ); + }; + + public renderReports = () => { + return ( + + + {this.renderInfo()} + + {/* Use Grid without GridItem to fill the height of panel */} + + {this.renderCostExpenditureComparison()} + {this.renderEnvironment()} + + + + + {this.renderTotalMaintenance()} + {this.renderRenewalEstimation()} + + + + + {this.renderProjectCostBreakdown()} + {this.renderProjectCostBreakdownTable()} + + + + + Disclaimer + +

+ This website does not constitute an offer to sell, a solicitation of an offer to + buy, or a recommendation of any security or any other product or service by Red + Hat, Inc. or any other third party regardless of whether such product or service + is referenced in this report. +

+
+
+
+
+
+ ); + }; + + public renderReportsSkeleton = () => { + return ( + + + + } skipBullseye={true}> + + + + + + + + + + }> + + + }> + + + + + + + }> + + + }> + + + + + + + }> + + + }> + + + + + + + ); + }; + + public renderFetchError = () => { + return ( + + + + + Error + + Something unexpected happend, please try again! + + + + ); + }; + + public render() { + const { reportInitialSavingEstimation, reportInitialSavingEstimationFetchStatus } = this.props; + + const isFetchComplete: boolean = reportInitialSavingEstimationFetchStatus.status === 'complete'; + + if ( + reportInitialSavingEstimationFetchStatus.error || + (isFetchComplete && !reportInitialSavingEstimation) + ) { + return this.renderFetchError(); } + + return ( + + {isFetchComplete ? this.renderReports() : this.renderReportsSkeleton()} + + ); + } } export default InitialSavingsEstimation; diff --git a/src/pages/ReportView/InitialSavingsEstimation/index.tsx b/src/pages/ReportView/InitialSavingsEstimation/index.tsx index 002bebd3..ae9690a8 100644 --- a/src/pages/ReportView/InitialSavingsEstimation/index.tsx +++ b/src/pages/ReportView/InitialSavingsEstimation/index.tsx @@ -4,23 +4,20 @@ import { GlobalState } from '../../../models/state'; import * as reportActions from '../../../actions/ReportActions'; const mapStateToProps = (state: GlobalState) => { - const { - report, - reportInitialSavingEstimation, - reportInitialSavingEstimationFetchStatus - } = state.reportState; - return { - report, - reportInitialSavingEstimation, - reportInitialSavingEstimationFetchStatus - }; + const { + report, + reportInitialSavingEstimation, + reportInitialSavingEstimationFetchStatus, + } = state.reportState; + return { + report, + reportInitialSavingEstimation, + reportInitialSavingEstimationFetchStatus, + }; }; const mapDispatchToProps = { - fetchReportInitialSavingEstimation: reportActions.fetchReportInitialSavingEstimation + fetchReportInitialSavingEstimation: reportActions.fetchReportInitialSavingEstimation, }; -export default connect( - mapStateToProps, - mapDispatchToProps -)(InitialSavingsEstimation); +export default connect(mapStateToProps, mapDispatchToProps)(InitialSavingsEstimation); diff --git a/src/pages/ReportView/ReportView.js b/src/pages/ReportView/ReportView.js index cfa9769e..66d6b0f9 100644 --- a/src/pages/ReportView/ReportView.js +++ b/src/pages/ReportView/ReportView.js @@ -5,61 +5,57 @@ import { REPORT_VIEW_PATHS, DEFAULT_VIEW_PATH_INDEX } from './ReportViewConstant import ReportViewPage from '../../PresentationalComponents/ReportViewPage'; class ReportView extends React.Component { - - constructor(props) { - super(props); - this.state = { - reportId: props.match.params.reportId - }; - } - - componentDidMount() { - const { reportId } = this.state; - this.props.fetchReport(reportId); + constructor(props) { + super(props); + this.state = { + reportId: props.match.params.reportId, + }; + } + + componentDidMount() { + const { reportId } = this.state; + this.props.fetchReport(reportId); + } + + render() { + const { report, reportFetchStatus } = this.props; + const { reportId } = this.state; + + if (!reportId || reportFetchStatus.error) { + return ; } - render() { - const { report, reportFetchStatus } = this.props; - const { reportId } = this.state; - - if (!reportId || reportFetchStatus.error) { - return ; - } - - return ( - - - { REPORT_VIEW_PATHS.map((elem, index) => { - const Component = elem.component; - return ( - } - /> - ); - })} - - - - - ); - } + return ( + + + {REPORT_VIEW_PATHS.map((elem, index) => { + const Component = elem.component; + return ( + } + /> + ); + })} + + + + + ); + } } ReportView.propTypes = { - report: PropTypes.any, - reportFetchStatus: PropTypes.object, - fetchReport: PropTypes.func, - history: PropTypes.object, - location: PropTypes.object, - match: PropTypes.object + report: PropTypes.any, + reportFetchStatus: PropTypes.object, + fetchReport: PropTypes.func, + history: PropTypes.object, + location: PropTypes.object, + match: PropTypes.object, }; export default ReportView; diff --git a/src/pages/ReportView/ReportView.test.tsx b/src/pages/ReportView/ReportView.test.tsx index 4e8f8414..eed15441 100644 --- a/src/pages/ReportView/ReportView.test.tsx +++ b/src/pages/ReportView/ReportView.test.tsx @@ -1,57 +1,57 @@ -import React from "react"; -import { shallow } from "enzyme"; -import ReportView from "./ReportView"; +import React from 'react'; +import { shallow } from 'enzyme'; +import ReportView from './ReportView'; const props = { report: { id: 36, - reportName: "My report name", - reportDescription: "My report description", - payloadName: "file1.json", + reportName: 'My report name', + reportDescription: 'My report description', + payloadName: 'file1.json', inserted: 254112, lastUpdate: 254112, - status: "CREATED" + status: 'CREATED', }, match: { params: { - reportId: 1 + reportId: 1, }, - url: '/reports/1' + url: '/reports/1', }, fetchReport: jest.fn(), reportFetchStatus: { error: null, - status: "none" + status: 'none', }, history: null, - location: null + location: null, }; -describe("ReportView", () => { - it("expect to redirect because no reportId", () => { +describe('ReportView', () => { + it('expect to redirect because no reportId', () => { const emptyProps = Object.assign({}, props, { match: { params: { - reportId: null - } - } + reportId: null, + }, + }, }); const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to redirect because error", () => { + it('expect to redirect because error', () => { const errorProps = Object.assign({}, props, { reportFetchStatus: { - error: 'Error loading data' - } + error: 'Error loading data', + }, }); const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to render object", () => { + it('expect to render object', () => { const objProps = Object.assign({}, props); const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); diff --git a/src/pages/ReportView/ReportViewConstants.tsx b/src/pages/ReportView/ReportViewConstants.tsx index 23c24f16..170efbd9 100644 --- a/src/pages/ReportView/ReportViewConstants.tsx +++ b/src/pages/ReportView/ReportViewConstants.tsx @@ -1,11 +1,14 @@ import asyncComponent from '../../Utilities/asyncComponent'; -const WorkloadMigrationSummary = asyncComponent(() => - import(/* webpackChunkName: "WorkloadMigrationSummary" */ './WorkloadSummary')); -const InitialSavingsEstimation = asyncComponent(() => - import(/* webpackChunkName: "InitialSavingsEstimation" */ './InitialSavingsEstimation')); -const WorkloadInventory = asyncComponent(() => - import(/* webpackChunkName: "WorkloadInventory" */ './WorkloadInventory')); +const WorkloadMigrationSummary = asyncComponent( + () => import(/* webpackChunkName: "WorkloadMigrationSummary" */ './WorkloadSummary') +); +const InitialSavingsEstimation = asyncComponent( + () => import(/* webpackChunkName: "InitialSavingsEstimation" */ './InitialSavingsEstimation') +); +const WorkloadInventory = asyncComponent( + () => import(/* webpackChunkName: "WorkloadInventory" */ './WorkloadInventory') +); export const DEFAULT_VIEW_PATH_INDEX = 0; @@ -15,22 +18,22 @@ export const WORKLOAD_INVENTORY_KEY = 'WORKLOAD_INVENTORY_KEY'; // The order of this array will determine the order of the tabs export const REPORT_VIEW_PATHS = [ - { - key: INITIAL_SAVINGS_ESTIMATION_KEY, - title: 'Initial savings estimation', - path: 'initialSavingsEstimation', - component: InitialSavingsEstimation - }, - { - key: WORKLOAD_MIGRATION_SUMMARY_KEY, - title: 'Workload migration summary', - path: 'workloadMigrationSummary', - component: WorkloadMigrationSummary - }, - { - key: WORKLOAD_INVENTORY_KEY, - title: 'Workload migration inventory', - path: 'workloadInventory', - component: WorkloadInventory - } + { + key: INITIAL_SAVINGS_ESTIMATION_KEY, + title: 'Initial savings estimation', + path: 'initialSavingsEstimation', + component: InitialSavingsEstimation, + }, + { + key: WORKLOAD_MIGRATION_SUMMARY_KEY, + title: 'Workload migration summary', + path: 'workloadMigrationSummary', + component: WorkloadMigrationSummary, + }, + { + key: WORKLOAD_INVENTORY_KEY, + title: 'Workload migration inventory', + path: 'workloadInventory', + component: WorkloadInventory, + }, ]; diff --git a/src/pages/ReportView/WorkloadInventory/WorkloadInventory.scss b/src/pages/ReportView/WorkloadInventory/WorkloadInventory.scss index a7e120c3..e6a6d046 100644 --- a/src/pages/ReportView/WorkloadInventory/WorkloadInventory.scss +++ b/src/pages/ReportView/WorkloadInventory/WorkloadInventory.scss @@ -1,8 +1,8 @@ .vertical-align-middle { - vertical-align: middle !important; + vertical-align: middle !important; } .table-vertical-align-middle.pf-c-table tr > *:first-child { - vertical-align: middle !important; - padding-bottom: 20px !important; + vertical-align: middle !important; + padding-bottom: 20px !important; } diff --git a/src/pages/ReportView/WorkloadInventory/WorkloadInventory.tsx b/src/pages/ReportView/WorkloadInventory/WorkloadInventory.tsx index a93e2c9d..c1db43ec 100644 --- a/src/pages/ReportView/WorkloadInventory/WorkloadInventory.tsx +++ b/src/pages/ReportView/WorkloadInventory/WorkloadInventory.tsx @@ -1,59 +1,50 @@ import React from 'react'; import { - ToolbarGroup, - ToolbarItem, - Pagination, - Button, - Bullseye, - EmptyState, - EmptyStateIcon, - EmptyStateVariant, - Title, - EmptyStateBody, - Stack, - StackItem, - Card, - CardBody, - Dropdown, - DropdownToggle, - DropdownItem, - TextInput, - DropdownPosition, - Select, - SelectVariant, - SelectOption, - ChipGroup, - Chip, - ButtonVariant, - Form, - Tooltip + ToolbarGroup, + ToolbarItem, + Pagination, + Button, + Bullseye, + EmptyState, + EmptyStateIcon, + EmptyStateVariant, + Title, + EmptyStateBody, + Stack, + StackItem, + Card, + CardBody, + Dropdown, + DropdownToggle, + DropdownItem, + TextInput, + DropdownPosition, + Select, + SelectVariant, + SelectOption, + ChipGroup, + Chip, + ButtonVariant, + Form, + Tooltip, } from '@patternfly/react-core'; import { - expandable, - Table, - TableHeader, - TableBody, - ICell, - IRow, - sortable, - ISortBy, - cellWidth, - classNames, - Visibility, - truncate + expandable, + Table, + TableHeader, + TableBody, + ICell, + IRow, + sortable, + ISortBy, + cellWidth, + classNames, + Visibility, + truncate, } from '@patternfly/react-table'; -import { - ErrorCircleOIcon, - SearchIcon, - FilterIcon, - FlagIcon -} from '@patternfly/react-icons'; -import { - SkeletonTable -} from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; -import { - TableToolbar -} from '@redhat-cloud-services/frontend-components/components/TableToolbar'; +import { ErrorCircleOIcon, SearchIcon, FilterIcon, FlagIcon } from '@patternfly/react-icons'; +import { SkeletonTable } from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; +import { TableToolbar } from '@redhat-cloud-services/frontend-components/components/TableToolbar'; import debounce from 'lodash/debounce'; import { Formik } from 'formik'; import { RouterGlobalProps } from '../../../models/router'; @@ -64,878 +55,956 @@ import { WorkloadInventoryDetails } from './WorkloadInventoryDetails'; import './WorkloadInventory.scss'; interface StateToProps extends RouterGlobalProps { - reportWorkloadInventory: { - total: number; - items: ReportWorkloadInventory[] - }; - reportWorkloadInventoryFetchStatus: ObjectFetchStatus; - reportWorkloadInventoryFilteredCSVFetchStatus: ObjectFetchStatus; - reportWorkloadInventoryAvailableFilters: WorkloadInventoryReportFiltersModel | null; - reportWorkloadInventoryAvailableFiltersFetchStatus: ObjectFetchStatus; + reportWorkloadInventory: { + total: number; + items: ReportWorkloadInventory[]; + }; + reportWorkloadInventoryFetchStatus: ObjectFetchStatus; + reportWorkloadInventoryFilteredCSVFetchStatus: ObjectFetchStatus; + reportWorkloadInventoryAvailableFilters: WorkloadInventoryReportFiltersModel | null; + reportWorkloadInventoryAvailableFiltersFetchStatus: ObjectFetchStatus; } interface DispatchToProps { - fetchReportWorkloadInventory: ( - reportId: number, - page: number, - perPage: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined, - filterValue: Map - ) => any; - fetchReportWorkloadInventoryFilteredCSV:( - id: number, - orderBy: string | undefined, - orderDirection: 'asc' | 'desc' | undefined, - filters: Map - ) => any; - fetchReportWorkloadInventoryAvailableFilters: (reportId: number) => any; + fetchReportWorkloadInventory: ( + reportId: number, + page: number, + perPage: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined, + filterValue: Map + ) => any; + fetchReportWorkloadInventoryFilteredCSV: ( + id: number, + orderBy: string | undefined, + orderDirection: 'asc' | 'desc' | undefined, + filters: Map + ) => any; + fetchReportWorkloadInventoryAvailableFilters: (reportId: number) => any; } interface Props extends StateToProps, DispatchToProps { - reportId: number; -}; + reportId: number; +} interface Row extends IRow { - isOpen?: boolean; + isOpen?: boolean; } interface Column extends ICell { - key: string; - cellFormatters?: any; - transforms?: any; + key: string; + cellFormatters?: any; + transforms?: any; } interface State { - page: number; - perPage: number; - columns: Column[]; - rows: Row[]; - sortBy: ISortBy; - filterDropDownOpen: boolean; - filterType: { - name: string, - value: FilterTypeKeyEnum - }; - filterValue: Map; - secondaryFilterDropDownOpen: boolean; -}; + page: number; + perPage: number; + columns: Column[]; + rows: Row[]; + sortBy: ISortBy; + filterDropDownOpen: boolean; + filterType: { + name: string; + value: FilterTypeKeyEnum; + }; + filterValue: Map; + secondaryFilterDropDownOpen: boolean; +} interface FilterConfig { - key: string; - label: string; - abbreviation?: string; -}; + key: string; + label: string; + abbreviation?: string; +} const filtersConfig = { - provider: { key: 'provider', label: 'Provider' } as FilterConfig, - datacenter: { key: 'datacenter', label: 'Datacenter' } as FilterConfig, - cluster: { key: 'cluster', label: 'Cluster' } as FilterConfig, - vmName: { key: 'vmName', label: 'VM name' } as FilterConfig, - workload: { key: 'workload', label: 'Workload' } as FilterConfig, - osName: { key: 'osName', label: 'Operating system type' } as FilterConfig, - effort: { key: 'complexity', label: 'Effort' } as FilterConfig, - recommendedTargetIMS: { key: 'recommendedTargetIMS', label: 'Recommended targets', abbreviation: 'Rec. Targets' } as FilterConfig, - flagIMS: { key: 'flagIMS', label: 'Flags' } as FilterConfig, + provider: { key: 'provider', label: 'Provider' } as FilterConfig, + datacenter: { key: 'datacenter', label: 'Datacenter' } as FilterConfig, + cluster: { key: 'cluster', label: 'Cluster' } as FilterConfig, + vmName: { key: 'vmName', label: 'VM name' } as FilterConfig, + workload: { key: 'workload', label: 'Workload' } as FilterConfig, + osName: { key: 'osName', label: 'Operating system type' } as FilterConfig, + effort: { key: 'complexity', label: 'Effort' } as FilterConfig, + recommendedTargetIMS: { + key: 'recommendedTargetIMS', + label: 'Recommended targets', + abbreviation: 'Rec. Targets', + } as FilterConfig, + flagIMS: { key: 'flagIMS', label: 'Flags' } as FilterConfig, }; enum FilterTypeKeyEnum { - NONE = "NONE", - PROVIDER = "PROVIDER", - DATACENTER = "DATACENTER", - CLUSTER = "CLUSTER", - VM_NAME = "VM_NAME", - WORKLOAD = "WORKLOAD", - OS_NAME = "OS_NAME", - EFFORT = "EFFORT", - RECOMMENDED_TARGETS_IMS = "RECOMMENDED_TARGETS_IMS", - FLAGS_IMS = "FLAGS_IMS" + NONE = 'NONE', + PROVIDER = 'PROVIDER', + DATACENTER = 'DATACENTER', + CLUSTER = 'CLUSTER', + VM_NAME = 'VM_NAME', + WORKLOAD = 'WORKLOAD', + OS_NAME = 'OS_NAME', + EFFORT = 'EFFORT', + RECOMMENDED_TARGETS_IMS = 'RECOMMENDED_TARGETS_IMS', + FLAGS_IMS = 'FLAGS_IMS', } const primaryFilters = [ - { name: filtersConfig.provider.label, value: FilterTypeKeyEnum.PROVIDER }, - { name: filtersConfig.datacenter.label, value: FilterTypeKeyEnum.DATACENTER }, - { name: filtersConfig.cluster.label, value: FilterTypeKeyEnum.CLUSTER }, - { name: filtersConfig.vmName.label, value: FilterTypeKeyEnum.VM_NAME }, - { name: filtersConfig.workload.label, value: FilterTypeKeyEnum.WORKLOAD }, - { name: filtersConfig.osName.label, value: FilterTypeKeyEnum.OS_NAME }, - { name: filtersConfig.effort.label, value: FilterTypeKeyEnum.EFFORT }, - { name: filtersConfig.recommendedTargetIMS.label, value: FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS }, - { name: filtersConfig.flagIMS.label, value: FilterTypeKeyEnum.FLAGS_IMS } + { name: filtersConfig.provider.label, value: FilterTypeKeyEnum.PROVIDER }, + { name: filtersConfig.datacenter.label, value: FilterTypeKeyEnum.DATACENTER }, + { name: filtersConfig.cluster.label, value: FilterTypeKeyEnum.CLUSTER }, + { name: filtersConfig.vmName.label, value: FilterTypeKeyEnum.VM_NAME }, + { name: filtersConfig.workload.label, value: FilterTypeKeyEnum.WORKLOAD }, + { name: filtersConfig.osName.label, value: FilterTypeKeyEnum.OS_NAME }, + { name: filtersConfig.effort.label, value: FilterTypeKeyEnum.EFFORT }, + { + name: filtersConfig.recommendedTargetIMS.label, + value: FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS, + }, + { name: filtersConfig.flagIMS.label, value: FilterTypeKeyEnum.FLAGS_IMS }, ]; const chipLabelsMap: Map = new Map([ - [FilterTypeKeyEnum.PROVIDER, filtersConfig.provider.label], - [FilterTypeKeyEnum.DATACENTER, filtersConfig.datacenter.label], - [FilterTypeKeyEnum.CLUSTER, filtersConfig.cluster.label], - [FilterTypeKeyEnum.VM_NAME, filtersConfig.vmName.label], - [FilterTypeKeyEnum.WORKLOAD, filtersConfig.workload.label], - [FilterTypeKeyEnum.OS_NAME, filtersConfig.osName.label], - [FilterTypeKeyEnum.EFFORT, filtersConfig.effort.label], - [FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS, filtersConfig.recommendedTargetIMS.abbreviation || filtersConfig.recommendedTargetIMS.label], - [FilterTypeKeyEnum.FLAGS_IMS, filtersConfig.flagIMS.label], + [FilterTypeKeyEnum.PROVIDER, filtersConfig.provider.label], + [FilterTypeKeyEnum.DATACENTER, filtersConfig.datacenter.label], + [FilterTypeKeyEnum.CLUSTER, filtersConfig.cluster.label], + [FilterTypeKeyEnum.VM_NAME, filtersConfig.vmName.label], + [FilterTypeKeyEnum.WORKLOAD, filtersConfig.workload.label], + [FilterTypeKeyEnum.OS_NAME, filtersConfig.osName.label], + [FilterTypeKeyEnum.EFFORT, filtersConfig.effort.label], + [ + FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS, + filtersConfig.recommendedTargetIMS.abbreviation || filtersConfig.recommendedTargetIMS.label, + ], + [FilterTypeKeyEnum.FLAGS_IMS, filtersConfig.flagIMS.label], ]); class WorkloadInventory extends React.Component { - - public changePage = debounce(() => { - this.refreshData(); - }, 800); - - constructor(props: Props) { - super(props); - this.state = { - page: 1, - perPage: 10, - columns: [ - { - title: filtersConfig.provider.label, - key: filtersConfig.provider.key, - props: { - className: 'vertical-align-middle' - }, - cellFormatters: [ expandable ], - transforms: [ cellWidth(10) ], - cellTransforms: [ truncate ] - }, - { - title: filtersConfig.datacenter.label, - key: filtersConfig.datacenter.key, - props: { - className: 'vertical-align-middle' - }, - transforms: [ cellWidth(15) ], - cellTransforms: [ truncate ] - }, - { - title: filtersConfig.cluster.label, - key: filtersConfig.cluster.key, - props: { - className: 'vertical-align-middle' - }, - transforms: [ cellWidth(15) ], - cellTransforms: [ truncate ] - }, - { - title: filtersConfig.vmName.label, - key: filtersConfig.vmName.key, - props: { - className: 'vertical-align-middle' - }, - transforms: [ sortable, cellWidth(15) ], - cellTransforms: [ truncate ] - }, - { - title: filtersConfig.workload.label, - key: filtersConfig.workload.key, - props: { - className: 'vertical-align-middle' - }, - transforms: [ cellWidth(10) ], - cellTransforms: [ truncate ], - columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)] - }, - { - title: filtersConfig.osName.label, - key: filtersConfig.osName.key, - props: { - className: 'vertical-align-middle' - }, - transforms: [ sortable, cellWidth(15) ], - cellTransforms: [ truncate ], - columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)] - }, - { - title: filtersConfig.effort.label, - key: filtersConfig.effort.key, - props: { - className: 'vertical-align-middle' - }, - transforms: [ sortable, cellWidth(10) ], - cellTransforms: [ truncate ], - columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)] - }, - { - title: filtersConfig.flagIMS.label, - key: filtersConfig.flagIMS.key, - props: { - className: 'vertical-align-middle' - }, - transforms: [ cellWidth(10) ], - columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)] - } + public changePage = debounce(() => { + this.refreshData(); + }, 800); + + constructor(props: Props) { + super(props); + this.state = { + page: 1, + perPage: 10, + columns: [ + { + title: filtersConfig.provider.label, + key: filtersConfig.provider.key, + props: { + className: 'vertical-align-middle', + }, + cellFormatters: [expandable], + transforms: [cellWidth(10)], + cellTransforms: [truncate], + }, + { + title: filtersConfig.datacenter.label, + key: filtersConfig.datacenter.key, + props: { + className: 'vertical-align-middle', + }, + transforms: [cellWidth(15)], + cellTransforms: [truncate], + }, + { + title: filtersConfig.cluster.label, + key: filtersConfig.cluster.key, + props: { + className: 'vertical-align-middle', + }, + transforms: [cellWidth(15)], + cellTransforms: [truncate], + }, + { + title: filtersConfig.vmName.label, + key: filtersConfig.vmName.key, + props: { + className: 'vertical-align-middle', + }, + transforms: [sortable, cellWidth(15)], + cellTransforms: [truncate], + }, + { + title: filtersConfig.workload.label, + key: filtersConfig.workload.key, + props: { + className: 'vertical-align-middle', + }, + transforms: [cellWidth(10)], + cellTransforms: [truncate], + columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)], + }, + { + title: filtersConfig.osName.label, + key: filtersConfig.osName.key, + props: { + className: 'vertical-align-middle', + }, + transforms: [sortable, cellWidth(15)], + cellTransforms: [truncate], + columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)], + }, + { + title: filtersConfig.effort.label, + key: filtersConfig.effort.key, + props: { + className: 'vertical-align-middle', + }, + transforms: [sortable, cellWidth(10)], + cellTransforms: [truncate], + columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)], + }, + { + title: filtersConfig.flagIMS.label, + key: filtersConfig.flagIMS.key, + props: { + className: 'vertical-align-middle', + }, + transforms: [cellWidth(10)], + columnTransforms: [classNames(Visibility.hiddenOnMd!, Visibility.visibleOnLg!)], + }, + ], + rows: [], + sortBy: {}, + filterDropDownOpen: false, + secondaryFilterDropDownOpen: false, + filterType: { + name: 'Filter', + value: FilterTypeKeyEnum.NONE, + }, + filterValue: new Map(), + }; + } + + public componentDidMount() { + this.refreshData(); + this.refreshFilters(); + } + + public handleDownloadFilteredCSV = () => { + const { sortBy, filterValue } = this.state; + const { reportId, fetchReportWorkloadInventoryFilteredCSV } = this.props; + + const orderByColumn = sortBy.index ? this.state.columns[sortBy.index - 1].key : undefined; + const orderDirection = sortBy.direction ? sortBy.direction : undefined; + + const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); + fetchReportWorkloadInventoryFilteredCSV( + reportId, + orderByColumn, + orderDirection, + mappedFilterValue + ).then((response: any) => { + const contentDispositionHeader = response.value.headers['content-disposition']; + const fileName = extractFilenameFromContentDispositionHeaderValue(contentDispositionHeader); + + const downloadUrl = window.URL.createObjectURL(new Blob([response.value.data])); + const link = document.createElement('a'); + link.href = downloadUrl; + link.setAttribute('download', fileName || 'workloadInventoryReport.csv'); + document.body.appendChild(link); + link.click(); + link.remove(); + }); + }; + + public refreshFilters = () => { + const { reportId, fetchReportWorkloadInventoryAvailableFilters } = this.props; + fetchReportWorkloadInventoryAvailableFilters(reportId); + }; + + public refreshData = ( + page: number = this.state.page, + perPage: number = this.state.perPage, + { direction, index } = this.state.sortBy, + filterValue: Map = this.state.filterValue + ) => { + const { reportId, fetchReportWorkloadInventory } = this.props; + + const orderByColumn = index ? this.state.columns[index - 1].key : undefined; + const orderDirection = direction ? direction : undefined; + + const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); + fetchReportWorkloadInventory( + reportId, + page, + perPage, + orderByColumn, + orderDirection, + mappedFilterValue + ).then(() => { + this.filtersInRowsAndCells(); + }); + }; + + public filtersInRowsAndCells = () => { + const items: ReportWorkloadInventory[] = this.props.reportWorkloadInventory.items + ? Object.values(this.props.reportWorkloadInventory.items) + : []; + + let rows: any[][] = []; + if (items.length > 0) { + rows = items.reduce((a: any[], b: ReportWorkloadInventory, index: number) => { + const workloads = + b.workloads && b.workloads.length > 0 ? b.workloads.join(', ') : 'Not identified'; + + a.push( + { + isOpen: false, + cells: [ + { + title: b.provider, + }, + { + title: b.datacenter, + }, + { + title: b.cluster, + }, + { + title: b.vmName, + }, + { + title: workloads, + }, + { + title: b.osName, + }, + { + title: b.complexity, + }, + { + title: ( + + + + +  {b.flagsIMS.length} + + ), + }, ], - rows: [], - sortBy: { }, - filterDropDownOpen: false, - secondaryFilterDropDownOpen: false, - filterType: { - name: 'Filter', - value: FilterTypeKeyEnum.NONE, - }, - filterValue: new Map() - }; - } - - public componentDidMount() { - this.refreshData(); - this.refreshFilters(); + }, + { + parent: index * 2, + fullWidth: false, + cells: [ + { + title: , + }, + ], + } + ); + return a; + }, []); } - public handleDownloadFilteredCSV = () => { - const { sortBy, filterValue, } = this.state; - const {reportId, fetchReportWorkloadInventoryFilteredCSV} = this.props; - - const orderByColumn = sortBy.index ? this.state.columns[sortBy.index-1].key : undefined; - const orderDirection = sortBy.direction ? sortBy.direction : undefined; - - const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); - fetchReportWorkloadInventoryFilteredCSV(reportId, orderByColumn, orderDirection, mappedFilterValue).then((response: any) => { - const contentDispositionHeader = response.value.headers['content-disposition']; - const fileName = extractFilenameFromContentDispositionHeaderValue(contentDispositionHeader); - - const downloadUrl = window.URL.createObjectURL(new Blob([response.value.data])); - const link = document.createElement('a'); - link.href = downloadUrl; - link.setAttribute('download', fileName || 'workloadInventoryReport.csv'); - document.body.appendChild(link); - link.click(); - link.remove(); - }); - }; - - public refreshFilters = () => { - const { reportId, fetchReportWorkloadInventoryAvailableFilters } = this.props; - fetchReportWorkloadInventoryAvailableFilters(reportId); - }; - - public refreshData = ( - page: number = this.state.page, - perPage: number = this.state.perPage, - { direction, index } = this.state.sortBy, - filterValue: Map = this.state.filterValue - ) => { - const { reportId, fetchReportWorkloadInventory } = this.props; - - const orderByColumn = index ? this.state.columns[index-1].key : undefined; - const orderDirection = direction ? direction : undefined; - - const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); - fetchReportWorkloadInventory(reportId, page, perPage, orderByColumn, orderDirection, mappedFilterValue).then(() => { - this.filtersInRowsAndCells(); - }); - }; - - public filtersInRowsAndCells = () => { - const items: ReportWorkloadInventory[] = this.props.reportWorkloadInventory.items - ? Object.values(this.props.reportWorkloadInventory.items) : []; - - let rows: any[][] = []; - if (items.length > 0) { - rows = items.reduce((a: any[], b: ReportWorkloadInventory, index: number) => { - const workloads = b.workloads && b.workloads.length > 0 ? b.workloads.join(", ") : 'Not identified'; - - a.push( - { - isOpen: false, - cells: [ - { - title: b.provider - }, - { - title: b.datacenter - }, - { - title: b.cluster - }, - { - title: b.vmName - }, - { - title: workloads - }, - { - title: b.osName - }, - { - title: b.complexity - }, - { - title:  {b.flagsIMS.length} - } - ] - }, - { - parent: index * 2, - fullWidth: false, - cells: [{ - title: - }] - } - ); - return a; - }, []); - } - - this.setState({ rows }); - }; - - /** - * Allways will reset the page to 1 - */ - public onSort = (event: any, index: number, direction: any) => { - const page = 1; - - const { reportId } = this.props; - const { perPage, filterValue } = this.state; - - const column = index ? this.state.columns[index-1].key : undefined; - const orderDirection = direction ? direction : undefined; - - const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); - this.props.fetchReportWorkloadInventory(reportId, page, perPage, column, orderDirection, mappedFilterValue).then(() => { - this.setState({ - page, - sortBy: { index, direction } - }); - this.filtersInRowsAndCells(); - }); - }; - - public onPageChange = (_event: any, page: number, shouldDebounce: boolean) => { - this.setState({ page }); - if (shouldDebounce) { - this.changePage(); - } else { - this.refreshData(page); - } - }; - - public onSetPage = (event: any, page: number) => { - return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); - }; - - public onPageInput = (event: any, page: number) => { - return this.onPageChange(event, page, true); - }; - - public onPerPageSelect = (_event: any, perPage: number) => { - const page = 1; - - this.setState({ page, perPage }); - this.refreshData(page, perPage); - }; - - public onRowCollapse = (_event: any, rowKey: number, isOpen: boolean) => { - const { rows } = this.state; - - rows[rowKey].isOpen = isOpen; + this.setState({ rows }); + }; + + /** + * Allways will reset the page to 1 + */ + public onSort = (event: any, index: number, direction: any) => { + const page = 1; + + const { reportId } = this.props; + const { perPage, filterValue } = this.state; + + const column = index ? this.state.columns[index - 1].key : undefined; + const orderDirection = direction ? direction : undefined; + + const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); + this.props + .fetchReportWorkloadInventory( + reportId, + page, + perPage, + column, + orderDirection, + mappedFilterValue + ) + .then(() => { this.setState({ - rows + page, + sortBy: { index, direction }, }); - }; - - public renderPagination = () => { - const { page, perPage } = this.state; - const { total } = this.props.reportWorkloadInventory; + this.filtersInRowsAndCells(); + }); + }; + + public onPageChange = (_event: any, page: number, shouldDebounce: boolean) => { + this.setState({ page }); + if (shouldDebounce) { + this.changePage(); + } else { + this.refreshData(page); + } + }; + + public onSetPage = (event: any, page: number) => { + return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); + }; + + public onPageInput = (event: any, page: number) => { + return this.onPageChange(event, page, true); + }; + + public onPerPageSelect = (_event: any, perPage: number) => { + const page = 1; + + this.setState({ page, perPage }); + this.refreshData(page, perPage); + }; + + public onRowCollapse = (_event: any, rowKey: number, isOpen: boolean) => { + const { rows } = this.state; + + rows[rowKey].isOpen = isOpen; + this.setState({ + rows, + }); + }; + + public renderPagination = () => { + const { page, perPage } = this.state; + const { total } = this.props.reportWorkloadInventory; + + return ( + + ); + }; + + public renderResultsTable = () => { + const { rows, columns, sortBy } = this.state; + + return ( + + + + + + + + +
{this.renderPagination()}
+ ); + }; + + public renderNoResults = () => { + return ( + + + + + + + No results found + + No results match the search criteria + + + + + ); + }; + + public renderFilterTypeDropdown = () => { + const { filterDropDownOpen, filterType } = this.state; + return ( + + + {filterType.name} + + } + isOpen={filterDropDownOpen} + dropdownItems={primaryFilters.map((element, index) => { + const onDropdownItemClick = (event) => { + this.onFilterTypeSelect(event, element.name, element.value); + }; + + return ( + + {element.name} + + ); + })} + /> + ); + }; + + public onFilterDropDownToggle = (isOpen: boolean) => { + this.setState({ filterDropDownOpen: isOpen }); + }; + + public onFilterTypeSelect = (e: any, filterName: string, filterValue: FilterTypeKeyEnum) => { + e.preventDefault(); + this.setState({ + filterType: { + name: filterName, + value: filterValue, + }, + filterDropDownOpen: false, + // filterValue: filterType === this.state.filterType ? this.state.filterValue : '' + }); + }; + + public renderFilterInput = () => { + const { filterType } = this.state; + const { reportWorkloadInventoryAvailableFilters } = this.props; + if (!reportWorkloadInventoryAvailableFilters) { + return; + } - return ( - + switch (filterType.value) { + case FilterTypeKeyEnum.PROVIDER: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.providers ); - }; - - public renderResultsTable = () => { - const { rows, columns, sortBy } = this.state; - - return ( - - - - - - - - -
- { this.renderPagination() } -
+ case FilterTypeKeyEnum.DATACENTER: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.datacenters ); - }; - - public renderNoResults = () => { - return ( - - - - - - No results found - - No results match the search criteria - - - - - + case FilterTypeKeyEnum.CLUSTER: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.clusters ); - }; - - public renderFilterTypeDropdown = () => { - const { filterDropDownOpen, filterType } = this.state; + case FilterTypeKeyEnum.WORKLOAD: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.workloads + ); + case FilterTypeKeyEnum.EFFORT: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.complexities + ); + case FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.recommendedTargetsIMS + ); + case FilterTypeKeyEnum.FLAGS_IMS: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.flagsIMS + ); + case FilterTypeKeyEnum.VM_NAME: + return this.renderSecondaryFilterInputText(filterType); + case FilterTypeKeyEnum.OS_NAME: + return this.renderSecondaryFilterDropdown( + filterType, + reportWorkloadInventoryAvailableFilters.osNames + ); + default: return ( - - - {filterType.name} - - } - isOpen={filterDropDownOpen} - dropdownItems={primaryFilters.map((element, index) => { - const onDropdownItemClick = (event) => { - this.onFilterTypeSelect(event, element.name, element.value) - }; - - return ( - - {element.name} - - ); - })} - /> + ); - }; - - public onFilterDropDownToggle = (isOpen: boolean) => { - this.setState({ filterDropDownOpen: isOpen }); - }; - - public onFilterTypeSelect = (e: any, filterName: string, filterValue: FilterTypeKeyEnum) => { - e.preventDefault(); - this.setState({ - filterType: { - name: filterName, - value: filterValue - }, - filterDropDownOpen: false, - // filterValue: filterType === this.state.filterType ? this.state.filterValue : '' - }); - }; - - public renderFilterInput = () => { - const { filterType } = this.state; - const { reportWorkloadInventoryAvailableFilters } = this.props; - if (!reportWorkloadInventoryAvailableFilters) { - return; - } - - switch(filterType.value) { - case FilterTypeKeyEnum.PROVIDER: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.providers); - case FilterTypeKeyEnum.DATACENTER: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.datacenters); - case FilterTypeKeyEnum.CLUSTER: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.clusters); - case FilterTypeKeyEnum.WORKLOAD: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.workloads); - case FilterTypeKeyEnum.EFFORT: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.complexities); - case FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.recommendedTargetsIMS); - case FilterTypeKeyEnum.FLAGS_IMS: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.flagsIMS); - case FilterTypeKeyEnum.VM_NAME: - return this.renderSecondaryFilterInputText(filterType); - case FilterTypeKeyEnum.OS_NAME: - return this.renderSecondaryFilterDropdown(filterType, reportWorkloadInventoryAvailableFilters.osNames); - default: - return ( - - ); - } - }; - - public onSecondaryFilterDropdownToggle = (isExpanded: boolean) => { - this.setState({ - secondaryFilterDropDownOpen: isExpanded - }); - }; - - public getMapValue = (key: FilterTypeKeyEnum, map: Map): string[] => { - if (!map.has(key)) { - map.set(key, []); - } - return map.get(key) || []; - }; - - public prepareFiltersToBeSended = (filterValue: Map) => { - const mappedFilterValue: Map = new Map(); - filterValue.forEach((value: string[], key: FilterTypeKeyEnum) => { - let keyFilter: string; - switch(key) { - case FilterTypeKeyEnum.PROVIDER: - keyFilter = filtersConfig.provider.key; - break; - case FilterTypeKeyEnum.DATACENTER: - keyFilter = filtersConfig.datacenter.key; - break; - case FilterTypeKeyEnum.CLUSTER: - keyFilter = filtersConfig.cluster.key; - break; - case FilterTypeKeyEnum.WORKLOAD: - keyFilter = filtersConfig.workload.key; - break; - case FilterTypeKeyEnum.EFFORT: - keyFilter = filtersConfig.effort.key; - break; - case FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS: - keyFilter = filtersConfig.recommendedTargetIMS.key; - break; - case FilterTypeKeyEnum.FLAGS_IMS: - keyFilter = filtersConfig.flagIMS.key; - break; - case FilterTypeKeyEnum.VM_NAME: - keyFilter = filtersConfig.vmName.key; - break; - case FilterTypeKeyEnum.OS_NAME: - keyFilter = filtersConfig.osName.key; - break; - default: - keyFilter = key; - } - mappedFilterValue.set(keyFilter, value); - }); - return mappedFilterValue; } - - public applyFilterAndSearch = (filterValue: Map) => { + }; + + public onSecondaryFilterDropdownToggle = (isExpanded: boolean) => { + this.setState({ + secondaryFilterDropDownOpen: isExpanded, + }); + }; + + public getMapValue = ( + key: FilterTypeKeyEnum, + map: Map + ): string[] => { + if (!map.has(key)) { + map.set(key, []); + } + return map.get(key) || []; + }; + + public prepareFiltersToBeSended = (filterValue: Map) => { + const mappedFilterValue: Map = new Map(); + filterValue.forEach((value: string[], key: FilterTypeKeyEnum) => { + let keyFilter: string; + switch (key) { + case FilterTypeKeyEnum.PROVIDER: + keyFilter = filtersConfig.provider.key; + break; + case FilterTypeKeyEnum.DATACENTER: + keyFilter = filtersConfig.datacenter.key; + break; + case FilterTypeKeyEnum.CLUSTER: + keyFilter = filtersConfig.cluster.key; + break; + case FilterTypeKeyEnum.WORKLOAD: + keyFilter = filtersConfig.workload.key; + break; + case FilterTypeKeyEnum.EFFORT: + keyFilter = filtersConfig.effort.key; + break; + case FilterTypeKeyEnum.RECOMMENDED_TARGETS_IMS: + keyFilter = filtersConfig.recommendedTargetIMS.key; + break; + case FilterTypeKeyEnum.FLAGS_IMS: + keyFilter = filtersConfig.flagIMS.key; + break; + case FilterTypeKeyEnum.VM_NAME: + keyFilter = filtersConfig.vmName.key; + break; + case FilterTypeKeyEnum.OS_NAME: + keyFilter = filtersConfig.osName.key; + break; + default: + keyFilter = key; + } + mappedFilterValue.set(keyFilter, value); + }); + return mappedFilterValue; + }; + + public applyFilterAndSearch = (filterValue: Map) => { + this.setState({ + filterValue, + }); + + // + const page = 1; + const { reportId } = this.props; + const { perPage } = this.state; + const { direction, index } = this.state.sortBy; + + const column = index ? this.state.columns[index - 1].key : undefined; + const orderDirection = direction ? direction : undefined; + + const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); + this.props + .fetchReportWorkloadInventory( + reportId, + page, + perPage, + column, + orderDirection, + mappedFilterValue + ) + .then(() => { this.setState({ - filterValue + page, }); + this.filtersInRowsAndCells(); + }); + }; + + public onSecondaryFilterDropdownSelect = ( + selection: string, + filterType: { name: string; value: FilterTypeKeyEnum } + ) => { + const { filterValue } = this.state; + + const currentFilterSelections: string[] = this.getMapValue(filterType.value, filterValue); + + // determine newFilterValue + const newFilterValue: Map = new Map(filterValue); + + const previousElement: string | undefined = currentFilterSelections.find( + (elem: string) => elem === selection + ); + if (previousElement) { + newFilterValue.set( + filterType.value, + currentFilterSelections.filter((elem: string) => elem !== selection) + ); + } else { + newFilterValue.set(filterType.value, [...currentFilterSelections, selection]); + } - // - const page = 1; - const { reportId } = this.props; - const { perPage } = this.state; - const { direction, index } = this.state.sortBy; - - const column = index ? this.state.columns[index-1].key : undefined; - const orderDirection = direction ? direction : undefined; - - const mappedFilterValue = this.prepareFiltersToBeSended(filterValue); - this.props.fetchReportWorkloadInventory(reportId, page, perPage, column, orderDirection, mappedFilterValue).then(() => { - this.setState({ - page - }); - this.filtersInRowsAndCells(); - }); - }; - - public onSecondaryFilterDropdownSelect = (selection: string, filterType: { name: string, value: FilterTypeKeyEnum }) => { - const { filterValue } = this.state; - - const currentFilterSelections: string[] = this.getMapValue(filterType.value, filterValue); - - // determine newFilterValue - const newFilterValue: Map = new Map(filterValue); - - const previousElement: string | undefined = currentFilterSelections.find((elem: string) => elem === selection); - if (previousElement) { - newFilterValue.set(filterType.value, currentFilterSelections.filter((elem: string) => elem !== selection)); - } else { - newFilterValue.set(filterType.value, [ - ...currentFilterSelections, - selection - ]); - } - - this.applyFilterAndSearch(newFilterValue); - }; - - public renderSecondaryFilterDropdown = (filterType: { name: string, value: FilterTypeKeyEnum }, options: string[]) => { - const { secondaryFilterDropDownOpen, filterValue } = this.state; - const selections: string[] = this.getMapValue(filterType.value, filterValue); - - if (options.length === 0) { - const onEmptySelect = () => {return;}; - return ( - - ); - } - - const onSelect = (event: React.MouseEvent | React.ChangeEvent, value: any) => { - this.onSecondaryFilterDropdownSelect(value, filterType); - }; - return ( - - ); - }; - - public renderSecondaryFilterInputText = (filterType: { name: string, value: FilterTypeKeyEnum }) => { - const { filterValue } = this.state; - - const onSubmit = (values: { filterText: string }, { resetForm }) => { - const selection = values.filterText; - const currentFilterSelections: string[] = this.getMapValue(filterType.value, filterValue); - - // determine newFilterValue - const newFilterValue: Map = new Map(filterValue); - - const previousElement: string | undefined = currentFilterSelections.find((elem: string) => elem === selection); - if (!previousElement) { - newFilterValue.set(filterType.value, [ - ...currentFilterSelections, - selection - ]); - - this.applyFilterAndSearch(newFilterValue); - } - - resetForm(); - }; + this.applyFilterAndSearch(newFilterValue); + }; + + public renderSecondaryFilterDropdown = ( + filterType: { name: string; value: FilterTypeKeyEnum }, + options: string[] + ) => { + const { secondaryFilterDropDownOpen, filterValue } = this.state; + const selections: string[] = this.getMapValue(filterType.value, filterValue); + + if (options.length === 0) { + const onEmptySelect = () => { + return; + }; + return ( + + ); + } - return ( - - { - ({ - values, - handleChange, - handleBlur, - handleSubmit - }) => - { - const customHandleChange = (_value: any, event: any) => { - handleChange(event); - }; - - return ( -
- - - - ); - } - } -
- ); + const onSelect = (event: React.MouseEvent | React.ChangeEvent, value: any) => { + this.onSecondaryFilterDropdownSelect(value, filterType); }; - - public deleteChipItem = (filterTypeKey: FilterTypeKeyEnum, element: string) => { - const currentFilterValue = this.state.filterValue; - const currentChipValues = this.getMapValue(filterTypeKey, this.state.filterValue); - - const newFilterValue = new Map(currentFilterValue); - const newChipValues = currentChipValues.filter((e) => e !== element); - newFilterValue.set(filterTypeKey, newChipValues); + return ( + + ); + }; + + public renderSecondaryFilterInputText = (filterType: { + name: string; + value: FilterTypeKeyEnum; + }) => { + const { filterValue } = this.state; + + const onSubmit = (values: { filterText: string }, { resetForm }) => { + const selection = values.filterText; + const currentFilterSelections: string[] = this.getMapValue(filterType.value, filterValue); + + // determine newFilterValue + const newFilterValue: Map = new Map(filterValue); + + const previousElement: string | undefined = currentFilterSelections.find( + (elem: string) => elem === selection + ); + if (!previousElement) { + newFilterValue.set(filterType.value, [...currentFilterSelections, selection]); this.applyFilterAndSearch(newFilterValue); - }; + } - public clearChips = () => { - this.setState({ - filterType: { - name: 'Filter', - value: FilterTypeKeyEnum.NONE, - } - }); - this.applyFilterAndSearch(new Map()); + resetForm(); }; - public reportFilterChips = () => { - const { filterValue } = this.state; - - const filterValueArray: Array<{key: FilterTypeKeyEnum, value: string[]}> = []; - filterValue.forEach((value: string[], key: FilterTypeKeyEnum) => { - if (value.length > 0) { - filterValueArray.push({ - key, - value - }); - } + return ( + + {({ values, handleChange, handleBlur, handleSubmit }) => { + const customHandleChange = (_value: any, event: any) => { + handleChange(event); + }; + + return ( +
+ + + + ); + }} +
+ ); + }; + + public deleteChipItem = (filterTypeKey: FilterTypeKeyEnum, element: string) => { + const currentFilterValue = this.state.filterValue; + const currentChipValues = this.getMapValue(filterTypeKey, this.state.filterValue); + + const newFilterValue = new Map(currentFilterValue); + const newChipValues = currentChipValues.filter((e) => e !== element); + newFilterValue.set(filterTypeKey, newChipValues); + + this.applyFilterAndSearch(newFilterValue); + }; + + public clearChips = () => { + this.setState({ + filterType: { + name: 'Filter', + value: FilterTypeKeyEnum.NONE, + }, + }); + this.applyFilterAndSearch(new Map()); + }; + + public reportFilterChips = () => { + const { filterValue } = this.state; + + const filterValueArray: Array<{ key: FilterTypeKeyEnum; value: string[] }> = []; + filterValue.forEach((value: string[], key: FilterTypeKeyEnum) => { + if (value.length > 0) { + filterValueArray.push({ + key, + value, }); + } + }); - return ( - - - { filterValueArray.map((group) => { - return ( - - { group.value.map((chip: string) => { - const onDeleteChipItem = () => { - this.deleteChipItem(group.key, chip); - }; - - return ( - - {chip} - - ); - })} - - ); - })} - - { - filterValueArray.length > 0 && -   - - } - - ); - }; - - public renderWorkloadInventory = () => { - const { reportWorkloadInventory } = this.props; - - return ( - - { (reportWorkloadInventory. total > 0 ? this.renderResultsTable() : this.renderNoResults()) } - - ); - }; - - public renderWorkloadInventorySkeleton = () => { - return ( - - - - - - - - ); - }; - - public renderFetchError = () => { - const onRetryClick = () => { - this.refreshData(); - }; - - return ( - - - - - Error - - - Something unexpected happend, please try again! - - - - - ); + return ( + + + {filterValueArray.map((group) => { + return ( + + {group.value.map((chip: string) => { + const onDeleteChipItem = () => { + this.deleteChipItem(group.key, chip); + }; + + return ( + + {chip} + + ); + })} + + ); + })} + + {filterValueArray.length > 0 && ( + +   + + + )} + + ); + }; + + public renderWorkloadInventory = () => { + const { reportWorkloadInventory } = this.props; + + return ( + + {reportWorkloadInventory.total > 0 ? this.renderResultsTable() : this.renderNoResults()} + + ); + }; + + public renderWorkloadInventorySkeleton = () => { + return ( + + + + + + + + ); + }; + + public renderFetchError = () => { + const onRetryClick = () => { + this.refreshData(); }; - public render() { - const { } = this.state; - const { - reportWorkloadInventoryFetchStatus, - reportWorkloadInventoryFilteredCSVFetchStatus - } = this.props; - - if (reportWorkloadInventoryFetchStatus.error) { - return this.renderFetchError(); - } - - const isFetchComplete: boolean = reportWorkloadInventoryFetchStatus.status === 'complete'; - - return ( - - - - {this.renderFilterTypeDropdown()} - {this.renderFilterInput()} - - - - - - - { this.renderPagination() } - - - - - - - { this.reportFilterChips() } - - - - { isFetchComplete ? this.renderWorkloadInventory() : this.renderWorkloadInventorySkeleton() } - - ); + return ( + + + + + Error + + Something unexpected happend, please try again! + + + + ); + }; + + public render() { + const { + reportWorkloadInventoryFetchStatus, + reportWorkloadInventoryFilteredCSVFetchStatus, + } = this.props; + + if (reportWorkloadInventoryFetchStatus.error) { + return this.renderFetchError(); } + const isFetchComplete: boolean = reportWorkloadInventoryFetchStatus.status === 'complete'; + + return ( + + + + {this.renderFilterTypeDropdown()} + {this.renderFilterInput()} + + + + + + {this.renderPagination()} + + + + + {this.reportFilterChips()} + + + {isFetchComplete ? this.renderWorkloadInventory() : this.renderWorkloadInventorySkeleton()} + + ); + } } export default WorkloadInventory; diff --git a/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.test.tsx b/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.test.tsx index d5641d8a..a05e77c0 100644 --- a/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.test.tsx +++ b/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.test.tsx @@ -1,28 +1,31 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { WorkloadInventoryDetails, WorkloadInventoryDetailsProps } from './WorkloadInventoryDetails'; +import { + WorkloadInventoryDetails, + WorkloadInventoryDetailsProps, +} from './WorkloadInventoryDetails'; describe('WorkloadInventoryDetails', () => { - it('expect to render', () => { - const props: WorkloadInventoryDetailsProps = { - reportWorkloadInventory: { - diskSpace: 1073741824, - memory: 2147483648, - cpuCores: 10, - osDescription: 'My description', - provider: '', - datacenter: '', - cluster: '', - vmName: '', - osName: '', - complexity: '', - flagsIMS: [], - workloads: [], - recommendedTargetsIMS: [], - insightsEnabled: true - } - }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render', () => { + const props: WorkloadInventoryDetailsProps = { + reportWorkloadInventory: { + diskSpace: 1073741824, + memory: 2147483648, + cpuCores: 10, + osDescription: 'My description', + provider: '', + datacenter: '', + cluster: '', + vmName: '', + osName: '', + complexity: '', + flagsIMS: [], + workloads: [], + recommendedTargetsIMS: [], + insightsEnabled: true, + }, + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.tsx b/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.tsx index a3ed03b0..aabd630a 100644 --- a/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.tsx +++ b/src/pages/ReportView/WorkloadInventory/WorkloadInventoryDetails/WorkloadInventoryDetails.tsx @@ -4,57 +4,54 @@ import { ReportWorkloadInventory } from '../../../../models'; import { formatNumber, formatBytes } from '../../../../Utilities/formatValue'; export interface WorkloadInventoryDetailsProps { - reportWorkloadInventory: ReportWorkloadInventory; + reportWorkloadInventory: ReportWorkloadInventory; } -interface State {} +export class WorkloadInventoryDetails extends React.Component { + constructor(props: WorkloadInventoryDetailsProps) { + super(props); + } -export class WorkloadInventoryDetails extends React.Component { - constructor(props: WorkloadInventoryDetailsProps) { - super(props); - } + public render() { + const { reportWorkloadInventory } = this.props; - public render() { - const { reportWorkloadInventory } = this.props; - - return ( -
-
-
Recommended targets
-
{reportWorkloadInventory.recommendedTargetsIMS.map((e, index) => { - return ( - VM suitable to be migrated to {e}
- } - > - -   - - - ); - })} - -
Flags
-
{ - reportWorkloadInventory.flagsIMS && reportWorkloadInventory.flagsIMS.length > 0 - ? reportWorkloadInventory.flagsIMS.join(", ") - : 'None identified' - } -
-
Disk space
-
{formatBytes(reportWorkloadInventory.diskSpace, 1)}
-
Memory
-
{formatBytes(reportWorkloadInventory.memory, 1)}
-
CPU cores
-
{formatNumber(reportWorkloadInventory.cpuCores, 0)}
-
Operating system description
-
{reportWorkloadInventory.osDescription}
-
Red Hat Insights
-
{reportWorkloadInventory.insightsEnabled ? 'Enabled' : 'Disabled'}
- - - ); - } + return ( +
+
+
Recommended targets
+
+ {reportWorkloadInventory.recommendedTargetsIMS.map((e, index) => { + return ( + VM suitable to be migrated to {e}
} + > + +   + + + ); + })} + +
Flags
+
+ {reportWorkloadInventory.flagsIMS && reportWorkloadInventory.flagsIMS.length > 0 + ? reportWorkloadInventory.flagsIMS.join(', ') + : 'None identified'} +
+
Disk space
+
{formatBytes(reportWorkloadInventory.diskSpace, 1)}
+
Memory
+
{formatBytes(reportWorkloadInventory.memory, 1)}
+
CPU cores
+
{formatNumber(reportWorkloadInventory.cpuCores, 0)}
+
Operating system description
+
{reportWorkloadInventory.osDescription}
+
Red Hat Insights
+
{reportWorkloadInventory.insightsEnabled ? 'Enabled' : 'Disabled'}
+ + + ); + } } diff --git a/src/pages/ReportView/WorkloadInventory/index.tsx b/src/pages/ReportView/WorkloadInventory/index.tsx index f1fb5c69..689f1ecc 100644 --- a/src/pages/ReportView/WorkloadInventory/index.tsx +++ b/src/pages/ReportView/WorkloadInventory/index.tsx @@ -4,29 +4,27 @@ import { GlobalState } from '../../../models/state'; import * as reportActions from '../../../actions/ReportActions'; const mapStateToProps = (state: GlobalState) => { - const { - reportWorkloadInventory, - reportWorkloadInventoryFetchStatus, - reportWorkloadInventoryFilteredCSVFetchStatus, - reportWorkloadInventoryAvailableFilters, - reportWorkloadInventoryAvailableFiltersFetchStatus - } = state.reportState; - return { - reportWorkloadInventory, - reportWorkloadInventoryFetchStatus, - reportWorkloadInventoryFilteredCSVFetchStatus, - reportWorkloadInventoryAvailableFilters, - reportWorkloadInventoryAvailableFiltersFetchStatus - }; + const { + reportWorkloadInventory, + reportWorkloadInventoryFetchStatus, + reportWorkloadInventoryFilteredCSVFetchStatus, + reportWorkloadInventoryAvailableFilters, + reportWorkloadInventoryAvailableFiltersFetchStatus, + } = state.reportState; + return { + reportWorkloadInventory, + reportWorkloadInventoryFetchStatus, + reportWorkloadInventoryFilteredCSVFetchStatus, + reportWorkloadInventoryAvailableFilters, + reportWorkloadInventoryAvailableFiltersFetchStatus, + }; }; const mapDispatchToProps = { - fetchReportWorkloadInventory: reportActions.fetchReportWorkloadInventory, - fetchReportWorkloadInventoryFilteredCSV: reportActions.fetchReportWorkloadInventoryFilteredCSV, - fetchReportWorkloadInventoryAvailableFilters: reportActions.fetchReportWorkloadInventoryAvailableFilters + fetchReportWorkloadInventory: reportActions.fetchReportWorkloadInventory, + fetchReportWorkloadInventoryFilteredCSV: reportActions.fetchReportWorkloadInventoryFilteredCSV, + fetchReportWorkloadInventoryAvailableFilters: + reportActions.fetchReportWorkloadInventoryAvailableFilters, }; -export default connect( - mapStateToProps, - mapDispatchToProps -)(WorkloadInventory); +export default connect(mapStateToProps, mapDispatchToProps)(WorkloadInventory); diff --git a/src/pages/ReportView/WorkloadSummary/WorkloadSummary.test.tsx b/src/pages/ReportView/WorkloadSummary/WorkloadSummary.test.tsx index cb08165a..47065827 100644 --- a/src/pages/ReportView/WorkloadSummary/WorkloadSummary.test.tsx +++ b/src/pages/ReportView/WorkloadSummary/WorkloadSummary.test.tsx @@ -3,70 +3,81 @@ import { shallow } from 'enzyme'; import { WorkloadMigrationSummary, WorkloadMigrationSummaryProps } from './WorkloadSummary'; describe('WorkloadMigrationSummary', () => { - it('expect to render error', () => { - const props: WorkloadMigrationSummaryProps = { - reportId: 1, - reportWorkloadSummary: null, - reportWorkloadSummaryFetchStatus: { error: 'Error message', status: 'complete' }, - fetchReportWorkloadSummary: (reportId: number) => ({ - then: () => ({ - catch: jest.fn() - }) - }) - }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render error', () => { + const props: WorkloadMigrationSummaryProps = { + reportId: 1, + reportWorkloadSummary: null, + reportWorkloadSummaryFetchStatus: { error: 'Error message', status: 'complete' }, + fetchReportWorkloadSummary: (reportId: number) => ({ + then: () => ({ + catch: jest.fn(), + }), + }), + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render skeleton', () => { - const props: WorkloadMigrationSummaryProps = { - reportId: 1, - reportWorkloadSummary: null, - reportWorkloadSummaryFetchStatus: { error: null, status: 'inProgress' }, - fetchReportWorkloadSummary: (reportId: number) => ({ - then: () => ({ - catch: jest.fn() - }) - }) - }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render skeleton', () => { + const props: WorkloadMigrationSummaryProps = { + reportId: 1, + reportWorkloadSummary: null, + reportWorkloadSummaryFetchStatus: { error: null, status: 'inProgress' }, + fetchReportWorkloadSummary: (reportId: number) => ({ + then: () => ({ + catch: jest.fn(), + }), + }), + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); - it('expect to render reports', () => { - const props: WorkloadMigrationSummaryProps = { - reportId: 1, - reportWorkloadSummary: { - summaryModels: [ - { - provider: 'VMware', - clusters: 1, - sockets: 164, - vms: 126, - hosts: 2, - product: 'VMware vCenter', - version: '6.5' - } - ], - complexityModel: { easy: 111, medium: 11, hard: 0, unknown: 0, unsupported: 4 }, - recommendedTargetsIMSModel: { total: 126, rhv: 122, rhel: 7, osp: 121, ocp: 111, openjdk: 10, jbosseap: 4 }, - workloadsDetectedOSTypeModels: [{ osName: 'ServerNT', total: 1 }, { osName: 'Linux', total: 4 }], - scanRunModels: [{ target: 'VMware', date: 1580774400000, smartStateEnabled: true }], - javaRuntimes: [], - applicationPlatforms: [], - osInformation: [] - }, - reportWorkloadSummaryFetchStatus: { error: null, status: 'complete' }, - fetchReportWorkloadSummary: (reportId: number) => ({ - then: (callback: any) => { - callback(); - return { - catch: jest.fn() - }; - } - }) - }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); + it('expect to render reports', () => { + const props: WorkloadMigrationSummaryProps = { + reportId: 1, + reportWorkloadSummary: { + summaryModels: [ + { + provider: 'VMware', + clusters: 1, + sockets: 164, + vms: 126, + hosts: 2, + product: 'VMware vCenter', + version: '6.5', + }, + ], + complexityModel: { easy: 111, medium: 11, hard: 0, unknown: 0, unsupported: 4 }, + recommendedTargetsIMSModel: { + total: 126, + rhv: 122, + rhel: 7, + osp: 121, + ocp: 111, + openjdk: 10, + jbosseap: 4, + }, + workloadsDetectedOSTypeModels: [ + { osName: 'ServerNT', total: 1 }, + { osName: 'Linux', total: 4 }, + ], + scanRunModels: [{ target: 'VMware', date: 1580774400000, smartStateEnabled: true }], + javaRuntimes: [], + applicationPlatforms: [], + osInformation: [], + }, + reportWorkloadSummaryFetchStatus: { error: null, status: 'complete' }, + fetchReportWorkloadSummary: (reportId: number) => ({ + then: (callback: any) => { + callback(); + return { + catch: jest.fn(), + }; + }, + }), + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); }); diff --git a/src/pages/ReportView/WorkloadSummary/WorkloadSummary.tsx b/src/pages/ReportView/WorkloadSummary/WorkloadSummary.tsx index 2c44c7d2..7c4fc18c 100644 --- a/src/pages/ReportView/WorkloadSummary/WorkloadSummary.tsx +++ b/src/pages/ReportView/WorkloadSummary/WorkloadSummary.tsx @@ -1,23 +1,19 @@ import React from 'react'; import { - Bullseye, - EmptyState, - EmptyStateIcon, - EmptyStateVariant, - Title, - EmptyStateBody, - Button, - Stack, - StackItem, - Tooltip + Bullseye, + EmptyState, + EmptyStateIcon, + EmptyStateVariant, + Title, + EmptyStateBody, + Button, + Stack, + StackItem, + Tooltip, } from '@patternfly/react-core'; import { ErrorCircleOIcon, HelpIcon } from '@patternfly/react-icons'; -import { - Skeleton -} from '@redhat-cloud-services/frontend-components/components/Skeleton'; -import { - SkeletonTable -} from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; +import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import { SkeletonTable } from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; import ReportCard from '../../../PresentationalComponents/ReportCard'; import SummaryTable from '../../../PresentationalComponents/Reports/SummaryTable'; import FancyChartDonut from '../../../PresentationalComponents/FancyChartDonut'; @@ -35,353 +31,330 @@ import { ApplicationPlatformsCard } from '../../../PresentationalComponents/Work import { OSInformation } from '../../../PresentationalComponents/WorkladSummary/OSInformation'; interface StateToProps { - reportWorkloadSummary: ReportWorkloadSummary | null; - reportWorkloadSummaryFetchStatus: ObjectFetchStatus; + reportWorkloadSummary: ReportWorkloadSummary | null; + reportWorkloadSummaryFetchStatus: ObjectFetchStatus; } interface DispatchToProps { - fetchReportWorkloadSummary: (reportId: number) => any; + fetchReportWorkloadSummary: (reportId: number) => any; } export interface WorkloadMigrationSummaryProps extends StateToProps, DispatchToProps { - reportId: number; -}; + reportId: number; +} interface State { - isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: boolean; -}; + isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: boolean; +} const sumReducer = (a: number, b: number) => a + b; -export class WorkloadMigrationSummary extends React.Component { - - constructor(props: WorkloadMigrationSummaryProps) { - super(props); - this.state = { - isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: false - }; +export class WorkloadMigrationSummary extends React.Component< + WorkloadMigrationSummaryProps, + State +> { + constructor(props: WorkloadMigrationSummaryProps) { + super(props); + this.state = { + isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: false, + }; + } + + public componentDidMount() { + this.refreshData(); + } + + public refreshData = () => { + const { reportId, fetchReportWorkloadSummary } = this.props; + fetchReportWorkloadSummary(reportId) + .then(() => { + this.setState({ isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: true }); + }) + .catch(() => { + this.setState({ isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: false }); + }); + }; + + public renderErrorCard = (cardTitle: string | React.ReactElement) => { + return ; + }; + + public renderSummary = () => { + const { reportWorkloadSummary } = this.props; + const title = 'Summary'; + + if (!reportWorkloadSummary) { + return this.renderErrorCard(title); } - public componentDidMount() { - this.refreshData(); + // TODO this validation was created when Models were not complete in the backend + // It should be safe to remove this + const summary = reportWorkloadSummary.summaryModels; + if (!summary) { + return this.renderErrorCard(title); } - public refreshData = () => { - const { reportId, fetchReportWorkloadSummary } = this.props; - fetchReportWorkloadSummary(reportId).then(() => { - this.setState({ isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: true }); - }).catch(() => { - this.setState({ isCurrentFetchReportWorkloadSummaryCompletedSuccessfully: false }); - }); - }; + return ( + + + + ); + }; - public renderErrorCard = (cardTitle: string | React.ReactElement) => { - return ; - }; + public renderMigrationComplexity = () => { + const { reportWorkloadSummary } = this.props; + const title = 'VM migration assessment'; - public renderSummary = () => { - const { reportWorkloadSummary } = this.props; - const title="Summary"; - - if (!reportWorkloadSummary) { - return this.renderErrorCard(title); - } - - // TODO this validation was created when Models were not complete in the backend - // It should be safe to remove this - const summary = reportWorkloadSummary.summaryModels; - if (!summary) { - return this.renderErrorCard(title); - } - - return ( - - - - ); - }; - - public renderMigrationComplexity = () => { - const { reportWorkloadSummary } = this.props; - const title="VM migration assessment"; - - if (!reportWorkloadSummary) { - return this.renderErrorCard(title); - } + if (!reportWorkloadSummary) { + return this.renderErrorCard(title); + } - // TODO this validation was created when Models were not complete in the backend - // It should be safe to remove this - const complexity = reportWorkloadSummary.complexityModel; - if (!complexity) { - return this.renderErrorCard(title); - } + // TODO this validation was created when Models were not complete in the backend + // It should be safe to remove this + const complexity = reportWorkloadSummary.complexityModel; + if (!complexity) { + return this.renderErrorCard(title); + } - // - const pieValues = [ - complexity.easy || 0, - complexity.medium || 0, - complexity.hard || 0, - complexity.unknown || 0, - complexity.unsupported || 0 - ]; - - const total = pieValues.reduce(sumReducer, 0); - const percentages = pieValues.map((val: number) => val / total); - - const chartProps = { - title: formatNumber(total, 0), - subTitle: 'Total VMs' - }; - - const chartData: FancyChartDonutData[] = [ - { label: 'Easy', value: percentages[0], extraData: pieValues[0] }, - { label: 'Medium', value: percentages[1], extraData: pieValues[1] }, - { label: 'Hard', value: percentages[2], extraData: pieValues[2] }, - { label: 'Unknown', value: percentages[3], extraData: pieValues[3] }, - { label: 'Unsupported', value: percentages[4], extraData: pieValues[4] } - ]; - - const tickFormat = (label: string, value: number, data: any) => `${label}: ${formatPercentage(value, 2)}`; - const tooltipFormat = ({datum}) => `${datum.x}: ${formatPercentage(datum.y, 2)} \n VMs: ${formatNumber(datum.extraData, 0)}`; - - return ( - - {title}  - - Data based on the number of flags found per VM - } - > - - - - - } - > - - - ); + // + const pieValues = [ + complexity.easy || 0, + complexity.medium || 0, + complexity.hard || 0, + complexity.unknown || 0, + complexity.unsupported || 0, + ]; + + const total = pieValues.reduce(sumReducer, 0); + const percentages = pieValues.map((val: number) => val / total); + + const chartProps = { + title: formatNumber(total, 0), + subTitle: 'Total VMs', }; - public renderTargetRecommendation = () => { - const { reportWorkloadSummary } = this.props; - const title="Target recommendations"; - - if (!reportWorkloadSummary) { - return this.renderErrorCard(title); + const chartData: FancyChartDonutData[] = [ + { label: 'Easy', value: percentages[0], extraData: pieValues[0] }, + { label: 'Medium', value: percentages[1], extraData: pieValues[1] }, + { label: 'Hard', value: percentages[2], extraData: pieValues[2] }, + { label: 'Unknown', value: percentages[3], extraData: pieValues[3] }, + { label: 'Unsupported', value: percentages[4], extraData: pieValues[4] }, + ]; + + const tickFormat = (label: string, value: number, data: any) => + `${label}: ${formatPercentage(value, 2)}`; + const tooltipFormat = ({ datum }) => + `${datum.x}: ${formatPercentage(datum.y, 2)} \n VMs: ${formatNumber(datum.extraData, 0)}`; + + return ( + + {title}  + + Data based on the number of flags found per VM} + > + + + + } + > + + + ); + }; + + public renderTargetRecommendation = () => { + const { reportWorkloadSummary } = this.props; + const title = 'Target recommendations'; + + if (!reportWorkloadSummary) { + return this.renderErrorCard(title); + } - // TODO this validation was created when Models were not complete in the backend - // It should be safe to remove this - const recommendedTargetsIMS = reportWorkloadSummary.recommendedTargetsIMSModel; - if (!recommendedTargetsIMS) { - return this.renderErrorCard(title); - } + // TODO this validation was created when Models were not complete in the backend + // It should be safe to remove this + const recommendedTargetsIMS = reportWorkloadSummary.recommendedTargetsIMSModel; + if (!recommendedTargetsIMS) { + return this.renderErrorCard(title); + } - const values = [ - recommendedTargetsIMS.rhv || 0, - recommendedTargetsIMS.osp || 0, - recommendedTargetsIMS.rhel || 0, - recommendedTargetsIMS.ocp || 0 - ]; - const total = recommendedTargetsIMS.total; - const percentages = values.map((val: number) => val / total); - - return ( - -
- - - {/* val / total); + + return ( + +
+ + + {/* */} - -
-
- ); - }; - - public renderWorkloadsDetectedTable = () => { - const { reportId } = this.props; - - return ( - - - - ); - }; - - public renderOSInformation = () => { - const { reportWorkloadSummary } = this.props; - return ; + +
+
+ ); + }; + + public renderWorkloadsDetectedTable = () => { + const { reportId } = this.props; + + return ( + + + + ); + }; + + public renderOSInformation = () => { + const { reportWorkloadSummary } = this.props; + return ; + }; + + public renderJavaRuntimes = () => { + const { reportWorkloadSummary } = this.props; + return ; + }; + + public renderApplicationPlatforms = () => { + const { reportWorkloadSummary } = this.props; + return ; + }; + + public renderFlagsTable = () => { + const { reportId } = this.props; + + return ( + + + + ); + }; + + public renderScansRun = () => { + const { reportWorkloadSummary } = this.props; + const title = 'Scans run'; + + if (!reportWorkloadSummary) { + return this.renderErrorCard(title); } - public renderJavaRuntimes = () => { - const { reportWorkloadSummary } = this.props; - return ; + // TODO this validation was created when Models were not complete in the backend + // It should be safe to remove this + const scanRuns = reportWorkloadSummary.scanRunModels; + if (!scanRuns) { + return this.renderErrorCard(title); } - public renderApplicationPlatforms = () => { - const { reportWorkloadSummary } = this.props; - return ; - } - - public renderFlagsTable = () => { - const { reportId } = this.props; - - return ( - - + return ( + + + + ); + }; + + public renderReports = () => { + return ( + + + {this.renderSummary()} + {this.renderTargetRecommendation()} + {this.renderMigrationComplexity()} + {this.renderFlagsTable()} + {this.renderOSInformation()} + {this.renderJavaRuntimes()} + {this.renderApplicationPlatforms()} + {this.renderWorkloadsDetectedTable()} + {this.renderScansRun()} + + + ); + }; + + public renderReportSkeleton = () => { + return ( + + + + }> + - ); - }; - - public renderScansRun = () => { - const { reportWorkloadSummary } = this.props; - const title="Scans run"; - - if (!reportWorkloadSummary) { - return this.renderErrorCard(title); - } - - // TODO this validation was created when Models were not complete in the backend - // It should be safe to remove this - const scanRuns = reportWorkloadSummary.scanRunModels; - if (!scanRuns) { - return this.renderErrorCard(title); - } - - return ( - - + + + }> + - ); - }; - - public renderReports = () => { - return ( - - - - { this.renderSummary() } - - - { this.renderTargetRecommendation() } - - - { this.renderMigrationComplexity() } - - - { this.renderFlagsTable() } - - - { this.renderOSInformation() } - - - { this.renderJavaRuntimes() } - - - { this.renderApplicationPlatforms() } - - - { this.renderWorkloadsDetectedTable() } - - - { this.renderScansRun() } - - - - ); - }; - - public renderReportSkeleton = () => { - return ( - - - - } - > - - - - - } - > - - - - - } - > - - - - - - ); - }; - - public renderFetchError = () => { - return ( - - - - - Error - - - Something unexpected happend, please try again! - - - - - ); - }; - - public render() { - const { isCurrentFetchReportWorkloadSummaryCompletedSuccessfully } = this.state; - const { reportWorkloadSummary, reportWorkloadSummaryFetchStatus } = this.props; - - const isFetchComplete: boolean = reportWorkloadSummaryFetchStatus.status === 'complete'; - - if (reportWorkloadSummaryFetchStatus.error || (isFetchComplete && !reportWorkloadSummary)) { - return this.renderFetchError(); - } - - return ( - - { isFetchComplete && isCurrentFetchReportWorkloadSummaryCompletedSuccessfully ? this.renderReports() : this.renderReportSkeleton() } - - ); + + + }> + + + + + + ); + }; + + public renderFetchError = () => { + return ( + + + + + Error + + Something unexpected happend, please try again! + + + + ); + }; + + public render() { + const { isCurrentFetchReportWorkloadSummaryCompletedSuccessfully } = this.state; + const { reportWorkloadSummary, reportWorkloadSummaryFetchStatus } = this.props; + + const isFetchComplete: boolean = reportWorkloadSummaryFetchStatus.status === 'complete'; + + if (reportWorkloadSummaryFetchStatus.error || (isFetchComplete && !reportWorkloadSummary)) { + return this.renderFetchError(); } + + return ( + + {isFetchComplete && isCurrentFetchReportWorkloadSummaryCompletedSuccessfully + ? this.renderReports() + : this.renderReportSkeleton()} + + ); + } } diff --git a/src/pages/ReportView/WorkloadSummary/index.tsx b/src/pages/ReportView/WorkloadSummary/index.tsx index 34e92be4..cf15c943 100644 --- a/src/pages/ReportView/WorkloadSummary/index.tsx +++ b/src/pages/ReportView/WorkloadSummary/index.tsx @@ -3,22 +3,16 @@ import { WorkloadMigrationSummary } from './WorkloadSummary'; import { GlobalState } from '../../../models/state'; import * as reportActions from '../../../actions/ReportActions'; -const mapStateToProps = (state: GlobalState) => { - const { - reportWorkloadSummary, - reportWorkloadSummaryFetchStatus - } = state.reportState; - return { - reportWorkloadSummary, - reportWorkloadSummaryFetchStatus - }; +const mapStateToProps = (state: GlobalState) => { + const { reportWorkloadSummary, reportWorkloadSummaryFetchStatus } = state.reportState; + return { + reportWorkloadSummary, + reportWorkloadSummaryFetchStatus, + }; }; const mapDispatchToProps = { - fetchReportWorkloadSummary: reportActions.fetchReportWorkloadSummary + fetchReportWorkloadSummary: reportActions.fetchReportWorkloadSummary, }; -export default connect( - mapStateToProps, - mapDispatchToProps -)(WorkloadMigrationSummary); +export default connect(mapStateToProps, mapDispatchToProps)(WorkloadMigrationSummary); diff --git a/src/pages/ReportView/index.js b/src/pages/ReportView/index.js index a663e627..6259a2df 100644 --- a/src/pages/ReportView/index.js +++ b/src/pages/ReportView/index.js @@ -3,24 +3,16 @@ import ReportView from './ReportView'; import { fetchReport } from '../../actions/ReportActions'; import { connect } from 'react-redux'; -const mapStateToProps = (state) => { - const { - report, - reportFetchStatus - } = state.reportState; - return { - report, - reportFetchStatus - }; +const mapStateToProps = (state) => { + const { report, reportFetchStatus } = state.reportState; + return { + report, + reportFetchStatus, + }; }; const mapDispatchToProps = { - fetchReport + fetchReport, }; -export default withRouter( - connect( - mapStateToProps, - mapDispatchToProps - )(ReportView) -); +export default withRouter(connect(mapStateToProps, mapDispatchToProps)(ReportView)); diff --git a/src/pages/Reports/Reports.scss b/src/pages/Reports/Reports.scss index bbe04ea4..a8e33bcf 100644 --- a/src/pages/Reports/Reports.scss +++ b/src/pages/Reports/Reports.scss @@ -1,11 +1,11 @@ .pf-c-empty-state > .dropzone { - margin-top: var(--pf-c-empty-state--c-button--MarginTop); + margin-top: var(--pf-c-empty-state--c-button--MarginTop); } .error { - color: var(--pf-global--danger-color--100) !important; + color: var(--pf-global--danger-color--100) !important; } .success { - color: var(--pf-global--success-color--100) !important; + color: var(--pf-global--success-color--100) !important; } diff --git a/src/pages/Reports/Reports.test.tsx b/src/pages/Reports/Reports.test.tsx index 1adc1aaa..f72d02c1 100644 --- a/src/pages/Reports/Reports.test.tsx +++ b/src/pages/Reports/Reports.test.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React from 'react'; import { shallow } from 'enzyme'; import Reports, { Props } from './Reports'; @@ -8,87 +8,87 @@ const props: Props = { items: [ { id: 36, - reportName: "My report name 36", - reportDescription: "My report description 36", - payloadName: "file1.json", + reportName: 'My report name 36', + reportDescription: 'My report description 36', + payloadName: 'file1.json', inserted: 123654565464, lastUpdate: 123654565464, - status: 'IN_PROGRESS' + status: 'IN_PROGRESS', }, { id: 37, - reportName: "My report name 37", - reportDescription: "My report description 37", - payloadName: "file2.json", + reportName: 'My report name 37', + reportDescription: 'My report description 37', + payloadName: 'file2.json', inserted: 123654565464, lastUpdate: 123654565464, - status: 'IN_PROGRESS' + status: 'IN_PROGRESS', }, { id: 38, - reportName: "My report name 38", - reportDescription: "My report description 38", - payloadName: "file3.json", - inserted: "2020-05-25T08:30:25.771+0000", - lastUpdate: "2020-05-26T09:50:25.771+0000", - status: 'IN_PROGRESS' - } - ] + reportName: 'My report name 38', + reportDescription: 'My report description 38', + payloadName: 'file3.json', + inserted: '2020-05-25T08:30:25.771+0000', + lastUpdate: '2020-05-26T09:50:25.771+0000', + status: 'IN_PROGRESS', + }, + ], }, reportsFetchStatus: { error: null, - status: 'complete' + status: 'complete', }, fetchReportPayloadDownloadLink: () => ({ - then: (fn: () => any) => fn() + then: (fn: () => any) => fn(), }), addNotification: (notification: any) => ({ - then: (fn: () => any) => fn() + then: (fn: () => any) => fn(), }), fetchReports: () => ({ - then: (fn: () => any) => fn() + then: (fn: () => any) => fn(), }), deleteReport: jest.fn(), showDeleteDialog: jest.fn(), closeDeleteDialog: jest.fn(), history: { - push: jest.fn() + push: jest.fn(), }, location: null, - match: null + match: null, }; -describe("Reports should render list depending of TOTAL value", () => { - it("expect to render empty list even though is not fetching and items.length > 0. Using Total = 0", () => { +describe('Reports should render list depending of TOTAL value', () => { + it('expect to render empty list even though is not fetching and items.length > 0. Using Total = 0', () => { const emptyProps: Props = { ...props, reports: { ...props.reports, - total: 0 + total: 0, }, reportsFetchStatus: { ...props.reportsFetchStatus, - status: 'inProgress' - } + status: 'inProgress', + }, }; const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to render list even though is fetching. Using Total > 0", () => { + it('expect to render list even though is fetching. Using Total > 0', () => { const listProps: Props = { ...props, reports: { ...props.reports, - total: props.reports.items.length + total: props.reports.items.length, }, reportsFetchStatus: { ...props.reportsFetchStatus, - status: 'inProgress' - } + status: 'inProgress', + }, }; const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); diff --git a/src/pages/Reports/Reports.tsx b/src/pages/Reports/Reports.tsx index c85613ce..887fd7aa 100644 --- a/src/pages/Reports/Reports.tsx +++ b/src/pages/Reports/Reports.tsx @@ -1,45 +1,36 @@ import React from 'react'; import { Link } from 'react-router-dom'; import { - Button, - ToolbarGroup, - ToolbarItem, - ButtonVariant, - Pagination, - InputGroup, - TextInput, - Form, - EmptyState, - EmptyStateVariant, - EmptyStateIcon, - Title, - EmptyStateBody, - Card, - CardBody, - Dropdown, - KebabToggle, - DropdownItem + Button, + ToolbarGroup, + ToolbarItem, + ButtonVariant, + Pagination, + InputGroup, + TextInput, + Form, + EmptyState, + EmptyStateVariant, + EmptyStateIcon, + Title, + EmptyStateBody, + Card, + CardBody, + Dropdown, + KebabToggle, + DropdownItem, } from '@patternfly/react-core'; import { - Table, - TableHeader, - TableBody, - TableGridBreakpoint, - IRow, - ICell + Table, + TableHeader, + TableBody, + TableGridBreakpoint, + IRow, + ICell, } from '@patternfly/react-table'; -import { - SearchIcon, - OkIcon, - ErrorCircleOIcon, - InProgressIcon -} from '@patternfly/react-icons'; -import { - SkeletonTable -} from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; -import { - TableToolbar -} from '@redhat-cloud-services/frontend-components/components/TableToolbar'; +import { SearchIcon, OkIcon, ErrorCircleOIcon, InProgressIcon } from '@patternfly/react-icons'; +import { SkeletonTable } from '@redhat-cloud-services/frontend-components/components/SkeletonTable'; +import { TableToolbar } from '@redhat-cloud-services/frontend-components/components/TableToolbar'; import debounce from 'lodash/debounce'; import { Formik } from 'formik'; import { Report } from '../../models'; @@ -51,487 +42,520 @@ import ReportsPage from '../../PresentationalComponents/ReportsPage'; import './Reports.scss'; interface StateToProps { - reports: { - total: number; - items: Report[]; - }; - reportsFetchStatus: ObjectFetchStatus; + reports: { + total: number; + items: Report[]; + }; + reportsFetchStatus: ObjectFetchStatus; } interface DispatchToProps { - fetchReports: (page: number, perPage: number, filterText: string) => any; - deleteReport: (id: number, name: string) => any; - showDeleteDialog: typeof deleteActions.openModal; - closeDeleteDialog: typeof deleteActions.closeModal; - fetchReportPayloadDownloadLink: (reportId: number) => any; - addNotification(notification: any); + fetchReports: (page: number, perPage: number, filterText: string) => any; + deleteReport: (id: number, name: string) => any; + showDeleteDialog: typeof deleteActions.openModal; + closeDeleteDialog: typeof deleteActions.closeModal; + fetchReportPayloadDownloadLink: (reportId: number) => any; + addNotification(notification: any); } -export interface Props extends StateToProps, DispatchToProps, RouterGlobalProps { -}; +export interface Props extends StateToProps, DispatchToProps, RouterGlobalProps {} export interface State { - filterText: string; - page: number; - perPage: number; - columns: Array; - rows: Array; - isFirstFetchReportsCall: boolean; - renderInProgresFetchStatus: boolean; - toggleReportsIDS: Set; -}; + filterText: string; + page: number; + perPage: number; + columns: Array; + rows: Array; + isFirstFetchReportsCall: boolean; + renderInProgresFetchStatus: boolean; + toggleReportsIDS: Set; +} const PULL_INTERVAL_TIME = 5000; class Reports extends React.Component { - - public pullTimer: any; - - public refreshDataWithDedounce = debounce(() => { - this.refreshData(); - }, 800); - - constructor(props: Props) { - super(props); - this.state = { - filterText: '', - page: 1, - perPage: 10, - columns: [ - 'Name', - 'Status', - { - title: '', - props: { - className: 'pf-u-text-align-center' - } - } - ], - rows: [], - isFirstFetchReportsCall: true, - renderInProgresFetchStatus: false, - toggleReportsIDS: new Set() - }; - } - - // React lyfe cycle methods - - public componentDidMount() { - this.refreshData(); - this.resetRefreshDataTimer(); - } - - public componentDidUpdate() { - // If it is the first time fetching reports and there are no reports - // then redirect to /no-reports page. - const { reportsFetchStatus, reports } = this.props; - const { isFirstFetchReportsCall } = this.state; - if (reports.total === 0 && isFirstFetchReportsCall && reportsFetchStatus.status === 'complete') { - this.props.history.push('/no-reports'); - } - } - - public componentWillUnmount() { - this.stopTimer(); - } - - // - - public setStateAndResetTimerAndSetRenderStatus = (state: any = {}) => { - this.resetRefreshDataTimer(); - this.setState({ - ...state, - renderInProgresFetchStatus: true - }); - }; - - // Pull timer config - - public resetRefreshDataTimer = () => { - this.stopTimer(); - this.startTimer(this.refreshData); - }; - - public startTimer = (callback: (...args: any[]) => void) => { - if (this.pullTimer) { - clearInterval(this.pullTimer); - } - - this.pullTimer = setInterval(callback, PULL_INTERVAL_TIME); + public pullTimer: any; + + public refreshDataWithDedounce = debounce(() => { + this.refreshData(); + }, 800); + + constructor(props: Props) { + super(props); + this.state = { + filterText: '', + page: 1, + perPage: 10, + columns: [ + 'Name', + 'Status', + { + title: '', + props: { + className: 'pf-u-text-align-center', + }, + }, + ], + rows: [], + isFirstFetchReportsCall: true, + renderInProgresFetchStatus: false, + toggleReportsIDS: new Set(), }; + } + + // React lyfe cycle methods + + public componentDidMount() { + this.refreshData(); + this.resetRefreshDataTimer(); + } + + public componentDidUpdate() { + // If it is the first time fetching reports and there are no reports + // then redirect to /no-reports page. + const { reportsFetchStatus, reports } = this.props; + const { isFirstFetchReportsCall } = this.state; + if ( + reports.total === 0 && + isFirstFetchReportsCall && + reportsFetchStatus.status === 'complete' + ) { + this.props.history.push('/no-reports'); + } + } - public stopTimer = () => { - clearInterval(this.pullTimer); - }; + public componentWillUnmount() { + this.stopTimer(); + } - // Table data management section + // - public refreshData = (page: number = this.state.page, perPage: number = this.state.perPage, filterText: string = this.state.filterText) => { + public setStateAndResetTimerAndSetRenderStatus = (state: any = {}) => { + this.resetRefreshDataTimer(); + this.setState({ + ...state, + renderInProgresFetchStatus: true, + }); + }; - this.props.fetchReports(page, perPage, filterText).then(() => { - this.filtersInRowsAndCells(); + // Pull timer config - // Change renderInProgresFetchStatus to false - const { renderInProgresFetchStatus } = this.state; - if (renderInProgresFetchStatus) { - this.setState({ - renderInProgresFetchStatus: false - }); - } + public resetRefreshDataTimer = () => { + this.stopTimer(); + this.startTimer(this.refreshData); + }; - // Change isFirstFetchReportsCall to false - const { isFirstFetchReportsCall } = this.state; - if (isFirstFetchReportsCall) { - this.setState({ isFirstFetchReportsCall: false }); - } - }); - }; + public startTimer = (callback: (...args: any[]) => void) => { + if (this.pullTimer) { + clearInterval(this.pullTimer); + } - public filtersInRowsAndCells = () => { - const reports: Report[] = this.props.reports.items ? Object.values(this.props.reports.items) : []; - - let rows: Array = []; - if (reports.length > 0) { - rows = reports.map((report) => ({ - cells: [ - { - title: this.renderReportName(report) - }, - { - title: this.renderReportStatus(report) - }, - { - title: this.renderReportActions(report) - } - ] - })); - } + this.pullTimer = setInterval(callback, PULL_INTERVAL_TIME); + }; - this.setState({ rows }); - }; + public stopTimer = () => { + clearInterval(this.pullTimer); + }; - // Actions + // Table data management section - public handleReportKebabToggle = (report: Report, isOpen: boolean) => { - const { toggleReportsIDS } = this.state; + public refreshData = ( + page: number = this.state.page, + perPage: number = this.state.perPage, + filterText: string = this.state.filterText + ) => { + this.props.fetchReports(page, perPage, filterText).then(() => { + this.filtersInRowsAndCells(); - const newValue = new Set(toggleReportsIDS); - if (isOpen) { - newValue.add(report.id); - } else { - newValue.delete(report.id); - } + // Change renderInProgresFetchStatus to false + const { renderInProgresFetchStatus } = this.state; + if (renderInProgresFetchStatus) { this.setState({ - toggleReportsIDS: newValue - }, () => { - this.filtersInRowsAndCells(); + renderInProgresFetchStatus: false, }); - }; + } + + // Change isFirstFetchReportsCall to false + const { isFirstFetchReportsCall } = this.state; + if (isFirstFetchReportsCall) { + this.setState({ isFirstFetchReportsCall: false }); + } + }); + }; + + public filtersInRowsAndCells = () => { + const reports: Report[] = this.props.reports.items + ? Object.values(this.props.reports.items) + : []; + + let rows: Array = []; + if (reports.length > 0) { + rows = reports.map((report) => ({ + cells: [ + { + title: this.renderReportName(report), + }, + { + title: this.renderReportStatus(report), + }, + { + title: this.renderReportActions(report), + }, + ], + })); + } - public handleDownloadReportPayload = (report: Report) => { - const {fetchReportPayloadDownloadLink, addNotification} = this.props; - - // close kebab - this.handleReportKebabToggle(report, false); - - - fetchReportPayloadDownloadLink(report.id).then((response: any) => { - if (response && response.value && response.value.data) { - const data = response.value.data; - if (data.downloadLink) { - const link = document.createElement('a'); - link.href = data.downloadLink; - link.setAttribute('download', data.filename); - document.body.appendChild(link); - link.click(); - link.remove(); - } else { - addNotification({ - variant: 'danger', - title: 'Could not download payload file', - description: 'The retention period for the payload file has expired', - dismissable: false, - }); - } - } else { - throw new Error("No valid response found"); - } - }); - }; + this.setState({ rows }); + }; - public handleDeleteReport = (report: Report) => { - const { deleteReport, showDeleteDialog, closeDeleteDialog } = this.props; - - showDeleteDialog({ - name: report.reportName, - type: 'report', - onDelete: () => { - deleteReport(report.id, report.reportName).then(() => { - closeDeleteDialog(); - - this.setStateAndResetTimerAndSetRenderStatus(); - this.refreshData(); - }); - }, - onCancel: () => { - closeDeleteDialog(); - } - }); - }; + // Actions - public onPageChange = (event: any, page: number, shouldDebounce: boolean) => { - this.setState({ page }); + public handleReportKebabToggle = (report: Report, isOpen: boolean) => { + const { toggleReportsIDS } = this.state; - this.setStateAndResetTimerAndSetRenderStatus(); - if (shouldDebounce) { - this.refreshDataWithDedounce(); + const newValue = new Set(toggleReportsIDS); + if (isOpen) { + newValue.add(report.id); + } else { + newValue.delete(report.id); + } + this.setState( + { + toggleReportsIDS: newValue, + }, + () => { + this.filtersInRowsAndCells(); + } + ); + }; + + public handleDownloadReportPayload = (report: Report) => { + const { fetchReportPayloadDownloadLink, addNotification } = this.props; + + // close kebab + this.handleReportKebabToggle(report, false); + + fetchReportPayloadDownloadLink(report.id).then((response: any) => { + if (response && response.value && response.value.data) { + const data = response.value.data; + if (data.downloadLink) { + const link = document.createElement('a'); + link.href = data.downloadLink; + link.setAttribute('download', data.filename); + document.body.appendChild(link); + link.click(); + link.remove(); } else { - this.refreshData(page); + addNotification({ + variant: 'danger', + title: 'Could not download payload file', + description: 'The retention period for the payload file has expired', + dismissable: false, + }); } - }; - - public onSetPage = (event: any, page: number) => { - return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); - }; - - public onPageInput = (event: any, page: number) => { - return this.onPageChange(event, page, true); - }; - - public onPerPageSelect = (_event: any, perPage: number) => { - const page = 1; - - this.setStateAndResetTimerAndSetRenderStatus({page, perPage}); - this.refreshData(page, perPage); - }; - - public handleSearchSubmit = (values: any) => { - const page = 1; - const filterText: string = values.filterText.trim(); - const {perPage} = this.state; - - this.setStateAndResetTimerAndSetRenderStatus({ - filterText, - page + } else { + throw new Error('No valid response found'); + } + }); + }; + + public handleDeleteReport = (report: Report) => { + const { deleteReport, showDeleteDialog, closeDeleteDialog } = this.props; + + showDeleteDialog({ + name: report.reportName, + type: 'report', + onDelete: () => { + deleteReport(report.id, report.reportName).then(() => { + closeDeleteDialog(); + + this.setStateAndResetTimerAndSetRenderStatus(); + this.refreshData(); }); - this.refreshData(page, perPage, filterText); - }; - - // Render section - - public renderReportName = (report: Report) => { - switch (report.status) { - case 'CREATED': - return { report.reportName }; - default: - return { report.reportName }; - } - }; - - public renderReportStatus = (report: Report) => { - switch (report.status) { - case 'CREATED': - return

Report created - { formatDate(new Date(report.lastUpdate)) }

; - case 'FAILED': - return

Report failed - { formatDate(new Date(report.lastUpdate)) }

; - case 'IN_PROGRESS': - return

Analyzing the upload file

; - default: - return null; - } - }; + }, + onCancel: () => { + closeDeleteDialog(); + }, + }); + }; + + public onPageChange = (event: any, page: number, shouldDebounce: boolean) => { + this.setState({ page }); + + this.setStateAndResetTimerAndSetRenderStatus(); + if (shouldDebounce) { + this.refreshDataWithDedounce(); + } else { + this.refreshData(page); + } + }; + + public onSetPage = (event: any, page: number) => { + return event.target.className === 'pf-c-form-control' || this.onPageChange(event, page, false); + }; + + public onPageInput = (event: any, page: number) => { + return this.onPageChange(event, page, true); + }; + + public onPerPageSelect = (_event: any, perPage: number) => { + const page = 1; + + this.setStateAndResetTimerAndSetRenderStatus({ page, perPage }); + this.refreshData(page, perPage); + }; + + public handleSearchSubmit = (values: any) => { + const page = 1; + const filterText: string = values.filterText.trim(); + const { perPage } = this.state; + + this.setStateAndResetTimerAndSetRenderStatus({ + filterText, + page, + }); + this.refreshData(page, perPage, filterText); + }; + + // Render section + + public renderReportName = (report: Report) => { + switch (report.status) { + case 'CREATED': + return {report.reportName}; + default: + return {report.reportName}; + } + }; - public renderReportActions = (report: Report) => { - const { toggleReportsIDS } = this.state; - const isOpen = toggleReportsIDS.has(report.id); - - const onDelete = (_event: any): void => { - this.handleDeleteReport(report); - }; - - const onDownload = (_event: any): void => { - this.handleDownloadReportPayload(report); - }; - - const onKebabToggle = (newIsOpen: boolean) => { - this.handleReportKebabToggle(report, newIsOpen); - }; - - const dropdownItems = [ - Download, - Delete, - ]; - - const dropdown = ( - } - isOpen={isOpen} - isPlain={true} - dropdownItems={dropdownItems} - /> + public renderReportStatus = (report: Report) => { + switch (report.status) { + case 'CREATED': + return ( +

+ Report created -{' '} + {formatDate(new Date(report.lastUpdate))} +

); - - switch (report.status) { - case 'CREATED': - return dropdown; - case 'FAILED': - return dropdown; - case 'IN_PROGRESS': - return ''; - default: - return null; - } - }; - - public renderNoResults = () => { + case 'FAILED': return ( - - - - - - No results found - - No results match the search criteria - - - - - +

+ Report failed -{' '} + {formatDate(new Date(report.lastUpdate))} +

); - }; - - public renderResultsTable = () => { - const { rows, columns } = this.state; - + case 'IN_PROGRESS': return ( - - - - - - - - -
- { this.renderPagination() } -
+

+ Analyzing the upload file +

); - }; + default: + return null; + } + }; - public renderPagination = () => { - const { reports } = this.props; - const { page, perPage } = this.state; + public renderReportActions = (report: Report) => { + const { toggleReportsIDS } = this.state; + const isOpen = toggleReportsIDS.has(report.id); - return ( - - ); + const onDelete = (_event: any): void => { + this.handleDeleteReport(report); }; - public renderResultsTableSkeleton = () => { - return ( - - ); + const onDownload = (_event: any): void => { + this.handleDownloadReportPayload(report); }; - public renderSearchBox = () => { - // Always return empty because every value is valid - const searchBoxValidation = () => { - return {}; - }; - - return ( - - { - ({ - values, - handleChange, - handleBlur, - handleSubmit - }) => - { - const customHandleChange = (_value: any, event: any) => { - handleChange(event); - }; - - return ( -
- - - - -
- ); - } - } -
- ); + const onKebabToggle = (newIsOpen: boolean) => { + this.handleReportKebabToggle(report, newIsOpen); }; - public render() { - const { isFirstFetchReportsCall, renderInProgresFetchStatus } = this.state; - const { reports, reportsFetchStatus } = this.props; - - let toolbar: React.ReactNode; - if (isFirstFetchReportsCall) { - toolbar = ''; - } else { - toolbar = ( - - - { this.renderSearchBox() } - - Create - - - - - { this.renderPagination() } - - - - ); - } + const dropdownItems = [ + + Download + , + + Delete + , + ]; + + const dropdown = ( + } + isOpen={isOpen} + isPlain={true} + dropdownItems={dropdownItems} + /> + ); + + switch (report.status) { + case 'CREATED': + return dropdown; + case 'FAILED': + return dropdown; + case 'IN_PROGRESS': + return ''; + default: + return null; + } + }; + + public renderNoResults = () => { + return ( + + + + + + + No results found + + No results match the search criteria + + + + + ); + }; + + public renderResultsTable = () => { + const { rows, columns } = this.state; + + return ( + + + + + + + + +
{this.renderPagination()}
+ ); + }; + + public renderPagination = () => { + const { reports } = this.props; + const { page, perPage } = this.state; + + return ( + + ); + }; + + public renderResultsTableSkeleton = () => { + return ; + }; + + public renderSearchBox = () => { + // Always return empty because every value is valid + const searchBoxValidation = () => { + return {}; + }; - let table: React.ReactNode; - if (isFirstFetchReportsCall || (reportsFetchStatus.status === 'inProgress' && renderInProgresFetchStatus)) { - table = this.renderResultsTableSkeleton(); - } else { - table = reports.total > 0 ? this.renderResultsTable() : this.renderNoResults(); - } + return ( + + {({ values, handleChange, handleBlur, handleSubmit }) => { + const customHandleChange = (_value: any, event: any) => { + handleChange(event); + }; + + return ( +
+ + + + +
+ ); + }} +
+ ); + }; + + public render() { + const { isFirstFetchReportsCall, renderInProgresFetchStatus } = this.state; + const { reports, reportsFetchStatus } = this.props; + + let toolbar: React.ReactNode; + if (isFirstFetchReportsCall) { + toolbar = ''; + } else { + toolbar = ( + + + {this.renderSearchBox()} + + + Create + + + + + {this.renderPagination()} + + + ); + } - return ( - - { toolbar } - { table } - - ); + let table: React.ReactNode; + if ( + isFirstFetchReportsCall || + (reportsFetchStatus.status === 'inProgress' && renderInProgresFetchStatus) + ) { + table = this.renderResultsTableSkeleton(); + } else { + table = reports.total > 0 ? this.renderResultsTable() : this.renderNoResults(); } + + return ( + + {toolbar} + {table} + + ); + } } export default Reports; diff --git a/src/pages/Reports/index.tsx b/src/pages/Reports/index.tsx index 6bf7a31e..1d7f2a6e 100644 --- a/src/pages/Reports/index.tsx +++ b/src/pages/Reports/index.tsx @@ -3,34 +3,26 @@ import Reports from './Reports'; import { withRouter } from 'react-router'; import { addNotification } from '@redhat-cloud-services/frontend-components-notifications'; import { GlobalState } from '../../models/state'; -import * as reportActions from '../../actions/ReportActions'; -import * as dialogDeleteActions from '../../actions/DialogDeleteActions'; +import * as reportActions from '../../actions/ReportActions'; +import * as dialogDeleteActions from '../../actions/DialogDeleteActions'; -const mapStateToProps = (state: GlobalState) => { - const { - reportState: { - reports, - reportsFetchStatus - } - } = state; - return { - reports, - reportsFetchStatus - }; +const mapStateToProps = (state: GlobalState) => { + const { + reportState: { reports, reportsFetchStatus }, + } = state; + return { + reports, + reportsFetchStatus, + }; }; const mapDispatchToProps = { - addNotification, - fetchReports: reportActions.fetchReports, - deleteReport: reportActions.deleteReport, - showDeleteDialog: dialogDeleteActions.openModal, - closeDeleteDialog: dialogDeleteActions.closeModal, - fetchReportPayloadDownloadLink: reportActions.fetchReportPayloadDownloadLink + addNotification, + fetchReports: reportActions.fetchReports, + deleteReport: reportActions.deleteReport, + showDeleteDialog: dialogDeleteActions.openModal, + closeDeleteDialog: dialogDeleteActions.closeModal, + fetchReportPayloadDownloadLink: reportActions.fetchReportPayloadDownloadLink, }; -export default withRouter( - connect( - mapStateToProps, - mapDispatchToProps - )(Reports) -); +export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Reports)); diff --git a/src/pages/ReportsUpload/ReportsUpload.scss b/src/pages/ReportsUpload/ReportsUpload.scss index 66203044..42eaf09b 100644 --- a/src/pages/ReportsUpload/ReportsUpload.scss +++ b/src/pages/ReportsUpload/ReportsUpload.scss @@ -1,3 +1,3 @@ .pf-l-stack.pf-sm-gutter > *:not(:last-child) { - margin-bottom: 10px; -} \ No newline at end of file + margin-bottom: 10px; +} diff --git a/src/pages/ReportsUpload/ReportsUpload.test.tsx b/src/pages/ReportsUpload/ReportsUpload.test.tsx index 8822ccf1..4509f70a 100644 --- a/src/pages/ReportsUpload/ReportsUpload.test.tsx +++ b/src/pages/ReportsUpload/ReportsUpload.test.tsx @@ -1,6 +1,6 @@ -import React from "react"; -import { shallow } from "enzyme"; -import ReportsUpload, { Props } from "./ReportsUpload"; +import React from 'react'; +import { shallow } from 'enzyme'; +import ReportsUpload, { Props } from './ReportsUpload'; const props: Props = { file: null, @@ -19,14 +19,14 @@ const props: Props = { match: null, user: { - firstTimeCreatingReports: false - }, - updateUser: jest.fn() + firstTimeCreatingReports: false, + }, + updateUser: jest.fn(), }; -describe("ReportsUpload", () => { - it("expect to render form", () => { - const wrapper = shallow(); +describe('ReportsUpload', () => { + it('expect to render form', () => { + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); }); diff --git a/src/pages/ReportsUpload/ReportsUpload.tsx b/src/pages/ReportsUpload/ReportsUpload.tsx index 79e16d1e..2805bad6 100644 --- a/src/pages/ReportsUpload/ReportsUpload.tsx +++ b/src/pages/ReportsUpload/ReportsUpload.tsx @@ -1,29 +1,27 @@ import React from 'react'; import { Link } from 'react-router-dom'; import { - Button, - Modal, - ButtonVariant, - Bullseye, - EmptyState, - EmptyStateVariant, - EmptyStateIcon, - Title, - EmptyStateBody, - ProgressMeasureLocation, - Progress, - ProgressVariant, - EmptyStateSecondaryActions, - ModalVariant + Button, + Modal, + ButtonVariant, + Bullseye, + EmptyState, + EmptyStateVariant, + EmptyStateIcon, + Title, + EmptyStateBody, + ProgressMeasureLocation, + Progress, + ProgressVariant, + EmptyStateSecondaryActions, + ModalVariant, } from '@patternfly/react-core'; import { VolumeIcon } from '@patternfly/react-icons'; import { - PageHeader, - PageHeaderTitle + PageHeader, + PageHeaderTitle, } from '@redhat-cloud-services/frontend-components/components/PageHeader'; -import { - Main -} from '@redhat-cloud-services/frontend-components/components/Main'; +import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; import Axios from 'axios'; import { Formik } from 'formik'; import * as Yup from 'yup'; @@ -34,327 +32,337 @@ import UploadForm from './UploadForm'; import './ReportsUpload.scss'; interface FormValues { - file: File | undefined; - reportName: string; - reportDescription: string; - yearOverYearGrowthRatePercentage: number; - percentageOfHypervisorsMigratedOnYear1: number; - percentageOfHypervisorsMigratedOnYear2: number; - percentageOfHypervisorsMigratedOnYear3: number; - percentageOfHypervisorsMigratedSum: number // Sum of year1, year2, and year3 + file: File | undefined; + reportName: string; + reportDescription: string; + yearOverYearGrowthRatePercentage: number; + percentageOfHypervisorsMigratedOnYear1: number; + percentageOfHypervisorsMigratedOnYear2: number; + percentageOfHypervisorsMigratedOnYear3: number; + percentageOfHypervisorsMigratedSum: number; // Sum of year1, year2, and year3 } interface StateToProps { - user: User | null; - file: File | null; - success: boolean | null; - error: string | null; - progress: number; - uploading: boolean + user: User | null; + file: File | null; + success: boolean | null; + error: string | null; + progress: number; + uploading: boolean; } interface DispatchToProps { - uploadProgress: (progress: number) => void; - uploadRequest: (upload: Upload, config: {}) => void; - selectUploadFile: (file: File) => void; - resetUploadFile: () => void; - updateUser: (user: User) => void; + uploadProgress: (progress: number) => void; + uploadRequest: (upload: Upload, config: any) => void; + selectUploadFile: (file: File) => void; + resetUploadFile: () => void; + updateUser: (user: User) => void; } -export interface Props extends StateToProps, DispatchToProps, RouterGlobalProps { -} +export interface Props extends StateToProps, DispatchToProps, RouterGlobalProps {} interface State { - showForm: boolean; - timeoutToRedirect: number; - cancelUploadSource: any; + showForm: boolean; + timeoutToRedirect: number; + cancelUploadSource: any; } const initialFormValue: FormValues = { - file: undefined, - reportName: '', - reportDescription: '', - yearOverYearGrowthRatePercentage: 5, - percentageOfHypervisorsMigratedOnYear1: 50, - percentageOfHypervisorsMigratedOnYear2: 30, - percentageOfHypervisorsMigratedOnYear3: 20, - percentageOfHypervisorsMigratedSum: 90 + file: undefined, + reportName: '', + reportDescription: '', + yearOverYearGrowthRatePercentage: 5, + percentageOfHypervisorsMigratedOnYear1: 50, + percentageOfHypervisorsMigratedOnYear2: 30, + percentageOfHypervisorsMigratedOnYear3: 20, + percentageOfHypervisorsMigratedSum: 90, }; const formValidationSchema = (values: FormValues) => { - return Yup.object().shape({ - file: Yup.mixed() - .required('File is mandatory') - .test('validFileSize', 'File size must not exceed 1GB', () => { - if (values.file) { - const fileSize = values.file.size; - return fileSize > 0 && fileSize <= 1073741824; - } - - // If there is no file then 'validFileSize' is valid - return true; - }), - reportName: Yup.string().trim() - .min(3, 'Report name must contain at least 3 characters ') - .max(250, 'Report name must contain fewer than 250 characters') - .required('Report name is mandatory'), - reportDescription: Yup.string().trim() - .max(250, 'Report description must contain fewer than 250 characters'), - yearOverYearGrowthRatePercentage: Yup.number() - .typeError('Invalid number') - .min(0, 'Value must be greater than or equal to 0') - .max(99999, 'Value must be less than or equal to 99999') - .required('Growth rate percentage is mandatory'), - percentageOfHypervisorsMigratedOnYear1: Yup.number() - .typeError('Invalid number') - .min(0, 'Value must be greater than or equal to 0') - .max(100, 'Value must be less than or equal to 100') - .required('Percentage of hypervisors migrated is mandatory'), - percentageOfHypervisorsMigratedOnYear2: Yup.number() - .typeError('Invalid number') - .min(0, 'Value must be greater than or equal to 0') - .max(100, 'Value must be less than or equal to 100') - .required('Percentage of hypervisors migrated is mandatory'), - percentageOfHypervisorsMigratedOnYear3: Yup.number() - .typeError('Invalid number') - .min(0, 'Value must be greater than or equal to 0') - .max(100, 'Value must be less than or equal to 100') - .required('Percentage of hypervisors migrated is mandatory'), - percentageOfHypervisorsMigratedSum: Yup.number() - .typeError('Invalid number') - .min(0, 'Value must be greater than or equal to 0') - .max(100, 'Value must be less than or equal to 100') - .test('validSum', 'The total percentage must not exceed 100', () => { - const sum = values.percentageOfHypervisorsMigratedOnYear1 + - values.percentageOfHypervisorsMigratedOnYear2 + - values.percentageOfHypervisorsMigratedOnYear3; - return sum >= 0 && sum <= 100; - }) - }); + return Yup.object().shape({ + file: Yup.mixed() + .required('File is mandatory') + .test('validFileSize', 'File size must not exceed 1GB', () => { + if (values.file) { + const fileSize = values.file.size; + return fileSize > 0 && fileSize <= 1073741824; + } + + // If there is no file then 'validFileSize' is valid + return true; + }), + reportName: Yup.string() + .trim() + .min(3, 'Report name must contain at least 3 characters ') + .max(250, 'Report name must contain fewer than 250 characters') + .required('Report name is mandatory'), + reportDescription: Yup.string() + .trim() + .max(250, 'Report description must contain fewer than 250 characters'), + yearOverYearGrowthRatePercentage: Yup.number() + .typeError('Invalid number') + .min(0, 'Value must be greater than or equal to 0') + .max(99999, 'Value must be less than or equal to 99999') + .required('Growth rate percentage is mandatory'), + percentageOfHypervisorsMigratedOnYear1: Yup.number() + .typeError('Invalid number') + .min(0, 'Value must be greater than or equal to 0') + .max(100, 'Value must be less than or equal to 100') + .required('Percentage of hypervisors migrated is mandatory'), + percentageOfHypervisorsMigratedOnYear2: Yup.number() + .typeError('Invalid number') + .min(0, 'Value must be greater than or equal to 0') + .max(100, 'Value must be less than or equal to 100') + .required('Percentage of hypervisors migrated is mandatory'), + percentageOfHypervisorsMigratedOnYear3: Yup.number() + .typeError('Invalid number') + .min(0, 'Value must be greater than or equal to 0') + .max(100, 'Value must be less than or equal to 100') + .required('Percentage of hypervisors migrated is mandatory'), + percentageOfHypervisorsMigratedSum: Yup.number() + .typeError('Invalid number') + .min(0, 'Value must be greater than or equal to 0') + .max(100, 'Value must be less than or equal to 100') + .test('validSum', 'The total percentage must not exceed 100', () => { + const sum = + values.percentageOfHypervisorsMigratedOnYear1 + + values.percentageOfHypervisorsMigratedOnYear2 + + values.percentageOfHypervisorsMigratedOnYear3; + return sum >= 0 && sum <= 100; + }), + }); }; class ReportsUpload extends React.Component { + public redirectTimer: any; + public beforeUnloadHandler: any; - public redirectTimer: any; - public beforeUnloadHandler: any; + constructor(props: Props) { + super(props); - constructor(props: Props) { - super(props); - - this.state = { - showForm: true, - timeoutToRedirect: 3, - cancelUploadSource: Axios.CancelToken.source() - }; - - this.redirectTimer = null; - } + this.state = { + showForm: true, + timeoutToRedirect: 3, + cancelUploadSource: Axios.CancelToken.source(), + }; - public componentDidMount() { - this.beforeUnloadHandler = window.addEventListener('beforeunload', (event) => { - if (this.props.uploading) { - event.preventDefault(); - return event.returnValue = 'Are you sure you want to close? The upload has not finished yet'; - } + this.redirectTimer = null; + } - return event; - }); - } + public componentDidMount() { + this.beforeUnloadHandler = window.addEventListener('beforeunload', (event) => { + if (this.props.uploading) { + event.preventDefault(); + return (event.returnValue = + 'Are you sure you want to close? The upload has not finished yet'); + } - public componentDidUpdate(_prevProps: Props, prevState: State) { - if (this.props.success && prevState.timeoutToRedirect !== 0 && this.state.timeoutToRedirect === 0) { - this.props.history.push('/reports'); - } + return event; + }); + } + + public componentDidUpdate(_prevProps: Props, prevState: State) { + if ( + this.props.success && + prevState.timeoutToRedirect !== 0 && + this.state.timeoutToRedirect === 0 + ) { + this.props.history.push('/reports'); } + } - public componentWillUnmount() { - // Remove handler - window.removeEventListener('beforeunload', this.beforeUnloadHandler); - - // Clear timer - if (this.redirectTimer) { - clearInterval(this.redirectTimer); - } + public componentWillUnmount() { + // Remove handler + window.removeEventListener('beforeunload', this.beforeUnloadHandler); - // Reset upload file redux stage - this.props.resetUploadFile(); + // Clear timer + if (this.redirectTimer) { + clearInterval(this.redirectTimer); } - /** - * Called by "Close modal" or by the "Cancel button" - */ - public handleCloseModel = () => { - const { uploading, user } = this.props; - - if (!uploading) { - if (user && user.firstTimeCreatingReports) { - this.props.history.push('/getting-started'); - } else { - this.props.history.push('/reports'); - } - } - }; + // Reset upload file redux stage + this.props.resetUploadFile(); + } + + /** + * Called by "Close modal" or by the "Cancel button" + */ + public handleCloseModel = () => { + const { uploading, user } = this.props; + + if (!uploading) { + if (user && user.firstTimeCreatingReports) { + this.props.history.push('/getting-started'); + } else { + this.props.history.push('/reports'); + } + } + }; - public actionsOnUploadSuccess = () => { - const { timeoutToRedirect } = this.state; + public actionsOnUploadSuccess = () => { + const { timeoutToRedirect } = this.state; - this.startRedirectTimer(); + this.startRedirectTimer(); - return ( - - ); - }; + return ( + + ); + }; - public startRedirectTimer = () => { - if (this.redirectTimer === null && this.state.timeoutToRedirect > 0) { - this.redirectTimer = setInterval(this.redirectCountDown, 1000); - } - }; + public startRedirectTimer = () => { + if (this.redirectTimer === null && this.state.timeoutToRedirect > 0) { + this.redirectTimer = setInterval(this.redirectCountDown, 1000); + } + }; - public redirectCountDown = () => { - const timeoutToRedirect = this.state.timeoutToRedirect - 1; - this.setState({ - timeoutToRedirect - }); - }; + public redirectCountDown = () => { + const timeoutToRedirect = this.state.timeoutToRedirect - 1; + this.setState({ + timeoutToRedirect, + }); + }; - public handleFormSubmit = (values: FormValues) => { - this.setState({ - showForm: false - }); + public handleFormSubmit = (values: FormValues) => { + this.setState({ + showForm: false, + }); - if (!this.props.file) { - throw Error('No file for handling submit'); - } + if (!this.props.file) { + throw Error('No file for handling submit'); + } - const upload: Upload = { - file: this.props.file, - reportName: values.reportName.trim(), - reportDescription: values.reportDescription ? values.reportDescription.trim() : '', - yearOverYearGrowthRatePercentage: values.yearOverYearGrowthRatePercentage, - percentageOfHypervisorsMigratedOnYear1: values.percentageOfHypervisorsMigratedOnYear1, - percentageOfHypervisorsMigratedOnYear2: values.percentageOfHypervisorsMigratedOnYear2, - percentageOfHypervisorsMigratedOnYear3: values.percentageOfHypervisorsMigratedOnYear3 - }; - - const config = { - headers: { - 'X-Requested-With': 'XMLHttpRequest' - }, - cancelToken: this.state.cancelUploadSource.token, - onUploadProgress: (progressEvent: any) => { - const progress: number = Math.round((progressEvent.loaded / progressEvent.total) * 100); - this.props.uploadProgress(progress); - } - }; - - this.props.uploadRequest(upload, config); + const upload: Upload = { + file: this.props.file, + reportName: values.reportName.trim(), + reportDescription: values.reportDescription ? values.reportDescription.trim() : '', + yearOverYearGrowthRatePercentage: values.yearOverYearGrowthRatePercentage, + percentageOfHypervisorsMigratedOnYear1: values.percentageOfHypervisorsMigratedOnYear1, + percentageOfHypervisorsMigratedOnYear2: values.percentageOfHypervisorsMigratedOnYear2, + percentageOfHypervisorsMigratedOnYear3: values.percentageOfHypervisorsMigratedOnYear3, }; - public handleCancelUpload = () => { - this.state.cancelUploadSource.cancel('Upload canceled by the user.'); + const config = { + headers: { + 'X-Requested-With': 'XMLHttpRequest', + }, + cancelToken: this.state.cancelUploadSource.token, + onUploadProgress: (progressEvent: any) => { + const progress: number = Math.round((progressEvent.loaded / progressEvent.total) * 100); + this.props.uploadProgress(progress); + }, }; - public onFileSelected = (files: File[]): void => { - const selectedFile = files[0]; - if (selectedFile) { - this.props.selectUploadFile(selectedFile); - } - }; + this.props.uploadRequest(upload, config); + }; - public renderProgress() { - let title: string; - let secondaryAction; - if (this.props.error) { - title = 'An error ocurred while uploading your file'; - secondaryAction = ( - Retry - ); - } else { - if (this.props.success) { - title = 'Upload finished successfully'; - secondaryAction = this.actionsOnUploadSuccess(); - } else { - title = 'Upload in progress'; - secondaryAction = ( - - ); - } - } + public handleCancelUpload = () => { + this.state.cancelUploadSource.cancel('Upload canceled by the user.'); + }; - return ( - - - - { title } -
- -
- - Please, wait until your file is uploaded. Then we will redirect you to the next page. - - - { secondaryAction } - -
-
- ); + public onFileSelected = (files: File[]): void => { + const selectedFile = files[0]; + if (selectedFile) { + this.props.selectUploadFile(selectedFile); } - - public renderForm() { - const validate = (values: any): void => { - return validateForm(values, formValidationSchema); - }; - - return ( - - { - props => - } - + }; + + public renderProgress() { + let title: string; + let secondaryAction; + if (this.props.error) { + title = 'An error ocurred while uploading your file'; + secondaryAction = ( + + Retry + + ); + } else { + if (this.props.success) { + title = 'Upload finished successfully'; + secondaryAction = this.actionsOnUploadSuccess(); + } else { + title = 'Upload in progress'; + secondaryAction = ( + ); + } } - public render() { - const { success, user } = this.props; - const { showForm } = this.state; - if (success && user && user.firstTimeCreatingReports) { - const { updateUser } = this.props; - updateUser({ firstTimeCreatingReports: false }); - } + return ( + + + + + {title} + +
+ +
+ + Please, wait until your file is uploaded. Then we will redirect you to the next page. + + {secondaryAction} +
+
+ ); + } + + public renderForm() { + const validate = (values: any): void => { + return validateForm(values, formValidationSchema); + }; - return ( - - - - -
- - { this.state.showForm ? this.renderForm() : this.renderProgress() } - -
-
- ); + return ( + + {(props) => ( + + )} + + ); + } + + public render() { + const { success, user } = this.props; + const { showForm } = this.state; + if (success && user && user.firstTimeCreatingReports) { + const { updateUser } = this.props; + updateUser({ firstTimeCreatingReports: false }); } + + return ( + + + + +
+ + {this.state.showForm ? this.renderForm() : this.renderProgress()} + +
+
+ ); + } } export default ReportsUpload; diff --git a/src/pages/ReportsUpload/UploadForm.scss b/src/pages/ReportsUpload/UploadForm.scss index 4eb5c637..1e34fcf6 100644 --- a/src/pages/ReportsUpload/UploadForm.scss +++ b/src/pages/ReportsUpload/UploadForm.scss @@ -1,3 +1,3 @@ .upload-form-subform-margin-left { - margin-left: 8px; + margin-left: 8px; } diff --git a/src/pages/ReportsUpload/UploadForm.test.tsx b/src/pages/ReportsUpload/UploadForm.test.tsx index 493bf46b..cee677d6 100644 --- a/src/pages/ReportsUpload/UploadForm.test.tsx +++ b/src/pages/ReportsUpload/UploadForm.test.tsx @@ -1,12 +1,12 @@ -import React from "react"; -import { shallow } from "enzyme"; -import UploadForm, { UploadFormProps } from "./UploadForm"; +import React from 'react'; +import { shallow } from 'enzyme'; +import UploadForm, { UploadFormProps } from './UploadForm'; const props: UploadFormProps = { errors: {}, values: {}, touched: {}, - file: new File([ '' ], 'myFile.zip'), + file: new File([''], 'myFile.zip'), onFileSelected: jest.fn(), error: {}, @@ -19,16 +19,16 @@ const props: UploadFormProps = { handleChange: jest.fn(), handleReset: jest.fn(), handleSubmit: jest.fn(), - setFieldValue: jest.fn() + setFieldValue: jest.fn(), }; -describe("UploadForm", () => { - it("expect to render", () => { - const wrapper = shallow(); +describe('UploadForm', () => { + it('expect to render', () => { + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); - it("expect to render errors", () => { + it('expect to render errors', () => { const props1 = { ...props, errors: { @@ -39,7 +39,7 @@ describe("UploadForm", () => { percentageOfHypervisorsMigratedOnYear1: 'Field value invalid', percentageOfHypervisorsMigratedOnYear2: 'Field value invalid', percentageOfHypervisorsMigratedOnYear3: 'Field value invalid', - percentageOfHypervisorsMigratedSum: 'Field value invalid' + percentageOfHypervisorsMigratedSum: 'Field value invalid', }, touched: { file: true, @@ -48,10 +48,10 @@ describe("UploadForm", () => { yearOverYearGrowthRatePercentage: true, percentageOfHypervisorsMigratedOnYear1: true, percentageOfHypervisorsMigratedOnYear2: true, - percentageOfHypervisorsMigratedSum: true - } + percentageOfHypervisorsMigratedSum: true, + }, }; - const wrapper = shallow(); + const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); }); diff --git a/src/pages/ReportsUpload/UploadForm.tsx b/src/pages/ReportsUpload/UploadForm.tsx index 1c0ef97e..a68cd175 100644 --- a/src/pages/ReportsUpload/UploadForm.tsx +++ b/src/pages/ReportsUpload/UploadForm.tsx @@ -1,324 +1,339 @@ import React from 'react'; +import { FormikState, FormikValues, FormikHandlers } from 'formik'; import { - FormikState, - FormikValues, - FormikHandlers} from 'formik'; -import { - Form, - FormGroup, - InputGroup, - TextInput, - Button, - ButtonVariant, - InputGroupText, - Stack, - StackItem, - ActionGroup, - Grid, - GridItem + Form, + FormGroup, + InputGroup, + TextInput, + Button, + ButtonVariant, + InputGroupText, + Stack, + StackItem, + ActionGroup, + Grid, + GridItem, } from '@patternfly/react-core'; import Dropzone from 'react-dropzone'; import './UploadForm.scss'; import { getFilenameWithoutExtensions } from '../../Utilities/extractUtils'; export interface UploadFormProps extends FormikState, FormikHandlers { - file: File | null; - onFileSelected: (files: File[]) => void; - handleCancel: (e: any) => any; + file: File | null; + onFileSelected: (files: File[]) => void; + handleCancel: (e: any) => any; - isValid: boolean; - handleSubmit: (e?: React.FormEvent) => void; - setFieldValue(field: keyof FormikValues & string, value: any, shouldValidate?: boolean): void; - handleBlur(e: React.FocusEvent): void; - handleChange(e: React.ChangeEvent): void; + isValid: boolean; + handleSubmit: (e?: React.FormEvent) => void; + setFieldValue(field: keyof FormikValues & string, value: any, shouldValidate?: boolean): void; + handleBlur(e: React.FocusEvent): void; + handleChange(e: React.ChangeEvent): void; } -class UploadForm extends React.Component { - - constructor(props: UploadFormProps) { - super(props); - } +class UploadForm extends React.Component { + constructor(props: UploadFormProps) { + super(props); + } - public componentDidMount() { - this.updateFieldValues(); - } + public componentDidMount() { + this.updateFieldValues(); + } - public componentDidUpdate(prevProps: any) { - if (prevProps.file !== this.props.file) { - this.updateFieldValues(); - } + public componentDidUpdate(prevProps: any) { + if (prevProps.file !== this.props.file) { + this.updateFieldValues(); } + } - public updateFieldValues() { - if (this.props.file) { - const file: File = this.props.file; - setTimeout(() => { - this.props.setFieldValue('file', file); - if (!this.props.values.reportName) { - const fileNameWithoutExtension = getFilenameWithoutExtensions(file.name); - this.props.setFieldValue('reportName', fileNameWithoutExtension); - } - }, 0); + public updateFieldValues() { + if (this.props.file) { + const file: File = this.props.file; + setTimeout(() => { + this.props.setFieldValue('file', file); + if (!this.props.values.reportName) { + const fileNameWithoutExtension = getFilenameWithoutExtensions(file.name); + this.props.setFieldValue('reportName', fileNameWithoutExtension); } + }, 0); } + } - public render() { - const { - values, - errors, - touched, - handleChange, - handleBlur, - handleSubmit, - isSubmitting - } = this.props; + public render() { + const { + values, + errors, + touched, + handleChange, + handleBlur, + handleSubmit, + isSubmitting, + } = this.props; - const onDrop = (files: File[]): void => { - this.props.onFileSelected(files); - }; - const customHandleChange = (_value: any, event: any) => { - handleChange(event); - }; + const onDrop = (files: File[]): void => { + this.props.onFileSelected(files); + }; + const customHandleChange = (_value: any, event: any) => { + handleChange(event); + }; - return ( -
- - - { ({ getRootProps, getInputProps, open }) => { - return ( -
-
- - - - - -
-
- ); - } } -
-
- - + + + {({ getRootProps, getInputProps, open }) => { + return ( +
+
+ + + + + +
+
+ ); + }} +
+
+ + + + + + + + + + + + % + + + + + {/* Add pf-sm-gutter manually until https://github.com/patternfly/patternfly-react/issues/4062 is solved*/} + + + + + + + + + + - - + % + + + + + + + + + + - - - - - - - % - - - - - {/* Add pf-sm-gutter manually until https://github.com/patternfly/patternfly-react/issues/4062 is solved*/} - - - - - - - - - - - % - - - - - - - - - - - - % - - - - - - - - - - - - % - - - - - - + % + + + +
+ + + + + + + + % + + + + + + - - - - -
- ); - } + + + + + + ); + } } export default UploadForm; diff --git a/src/pages/ReportsUpload/index.tsx b/src/pages/ReportsUpload/index.tsx index d77c53ff..c4f23ffd 100644 --- a/src/pages/ReportsUpload/index.tsx +++ b/src/pages/ReportsUpload/index.tsx @@ -4,38 +4,27 @@ import * as uploadActions from '../../actions/UploadActions'; import * as userActions from '../../actions/UserActions'; import { GlobalState } from '../../models/state'; -const mapStateToProps = (state: GlobalState) => { - const { - uploadState: { - file, - success, - error, - progress, - uploading - }, - userState: { - user - } - } = state; - return { - user, - file, - success, - error, - progress, - uploading - }; +const mapStateToProps = (state: GlobalState) => { + const { + uploadState: { file, success, error, progress, uploading }, + userState: { user }, + } = state; + return { + user, + file, + success, + error, + progress, + uploading, + }; }; const mapDispatchToProps = { - uploadRequest: uploadActions.uploadRequest, - uploadProgress: uploadActions.uploadProgress, - selectUploadFile: uploadActions.selectUploadFile, - resetUploadFile: uploadActions.resetUploadFile, - updateUser: userActions.updateUser + uploadRequest: uploadActions.uploadRequest, + uploadProgress: uploadActions.uploadProgress, + selectUploadFile: uploadActions.selectUploadFile, + resetUploadFile: uploadActions.resetUploadFile, + updateUser: userActions.updateUser, }; -export default connect( - mapStateToProps, - mapDispatchToProps -)(ReportsUpload); +export default connect(mapStateToProps, mapDispatchToProps)(ReportsUpload); diff --git a/src/reducers/DialogDeleteReducer.tsx b/src/reducers/DialogDeleteReducer.tsx index 148a2b22..5edf6e16 100644 --- a/src/reducers/DialogDeleteReducer.tsx +++ b/src/reducers/DialogDeleteReducer.tsx @@ -5,41 +5,43 @@ import { closeModal, error, openModal, processing } from '../actions/DialogDelet export const stateKey = 'deleteDialog'; export const defaultState: DialogDeleteState = { - isOpen: false, - isProcessing: false, - isError: false, - name: '', - type: '', - onDelete: () => undefined, - onCancel: () => undefined + isOpen: false, + isProcessing: false, + isError: false, + name: '', + type: '', + onDelete: () => undefined, + onCancel: () => undefined, }; -export type DeleteDialogAction = ActionType; +export type DeleteDialogAction = ActionType< + typeof openModal | typeof closeModal | typeof processing | typeof error +>; export const dialogDeleteReducer = ( - state: DialogDeleteState = defaultState, - action: DeleteDialogAction + state: DialogDeleteState = defaultState, + action: DeleteDialogAction ): DialogDeleteState => { - switch (action.type) { - case getType(openModal): - return { - ...state, - ...action.payload, - isOpen: true - }; - case getType(processing): - return { - ...state, - isProcessing: true - }; - case getType(closeModal): - return defaultState; - case getType(error): - return { - ...state, - isError: true - }; - default: - return state; - } + switch (action.type) { + case getType(openModal): + return { + ...state, + ...action.payload, + isOpen: true, + }; + case getType(processing): + return { + ...state, + isProcessing: true, + }; + case getType(closeModal): + return defaultState; + case getType(error): + return { + ...state, + isError: true, + }; + default: + return state; + } }; diff --git a/src/reducers/MappingsReducer.tsx b/src/reducers/MappingsReducer.tsx index 335d1b58..4b175d68 100644 --- a/src/reducers/MappingsReducer.tsx +++ b/src/reducers/MappingsReducer.tsx @@ -4,71 +4,71 @@ import { MappingsState, ObjectFetchStatus } from '../models/state'; import { GenericAction } from '../models/action'; export const defaultFetchStatus: ObjectFetchStatus = { - error: null, - status: 'none' + error: null, + status: 'none', }; const defaultState: MappingsState = { - flagAssessment: { - byFlag: new Map(), - fetchStatus: new Map(), - errors: new Map(), - allFlags: [], - allFlagsFetchStatus: { ...defaultFetchStatus } - } + flagAssessment: { + byFlag: new Map(), + fetchStatus: new Map(), + errors: new Map(), + allFlags: [], + allFlagsFetchStatus: { ...defaultFetchStatus }, + }, }; export const mappingsReducer = (state: MappingsState = defaultState, action: GenericAction) => { - switch (action.type) { - // - case pendingMessage(ActionTypes.FETCH_ALL_FLAG_ASSESSMENT): { - const nextState: MappingsState = { - ...state, - flagAssessment: { - ...state.flagAssessment, - allFlagsFetchStatus: { - status: 'inProgress', - error: null - } - } - }; - - return nextState; - } + switch (action.type) { + // + case pendingMessage(ActionTypes.FETCH_ALL_FLAG_ASSESSMENT): { + const nextState: MappingsState = { + ...state, + flagAssessment: { + ...state.flagAssessment, + allFlagsFetchStatus: { + status: 'inProgress', + error: null, + }, + }, + }; - case successMessage(ActionTypes.FETCH_ALL_FLAG_ASSESSMENT): { - const nextState: MappingsState = { - ...state, - flagAssessment: { - ...state.flagAssessment, - allFlags: action.payload.data.data, - allFlagsFetchStatus: { - status: 'complete', - error: null - } - } - }; + return nextState; + } - return nextState; - } + case successMessage(ActionTypes.FETCH_ALL_FLAG_ASSESSMENT): { + const nextState: MappingsState = { + ...state, + flagAssessment: { + ...state.flagAssessment, + allFlags: action.payload.data.data, + allFlagsFetchStatus: { + status: 'complete', + error: null, + }, + }, + }; - case failureMessage(ActionTypes.FETCH_ALL_FLAG_ASSESSMENT): { - const nextState: MappingsState = { - ...state, - flagAssessment: { - ...state.flagAssessment, - allFlags: [], - allFlagsFetchStatus: { - status: 'complete', - error: action.payload.message - } - } - }; + return nextState; + } - return nextState; - } + case failureMessage(ActionTypes.FETCH_ALL_FLAG_ASSESSMENT): { + const nextState: MappingsState = { + ...state, + flagAssessment: { + ...state.flagAssessment, + allFlags: [], + allFlagsFetchStatus: { + status: 'complete', + error: action.payload.message, + }, + }, + }; - default: - return state; + return nextState; } + + default: + return state; + } }; diff --git a/src/reducers/ReportsReducer.test.tsx b/src/reducers/ReportsReducer.test.tsx index e27c0129..157fa908 100644 --- a/src/reducers/ReportsReducer.test.tsx +++ b/src/reducers/ReportsReducer.test.tsx @@ -8,205 +8,205 @@ import { ReportState, ObjectFetchStatus } from '../models/state'; import { Report } from '../models'; const defaultFetchStatus: ObjectFetchStatus = { - error: null, - status: 'none' + error: null, + status: 'none', }; const reportTestInitialState: ReportState = { - reports: { - total: 1, - items: [ - { - id: 36, - reportName: 'my report name 37', - reportDescription: 'my report description 37', - payloadName: 'file1.json', - inserted: 546785214, - lastUpdate: 546785214, - status: 'IN_PROGRESS' - } - ] - }, - reportsFetchStatus: { ...defaultFetchStatus }, - - report: { - id: 37, + reports: { + total: 1, + items: [ + { + id: 36, reportName: 'my report name 37', reportDescription: 'my report description 37', - payloadName: 'file2.json', - inserted: 546425465, - lastUpdate: 546425465, - status: 'IN_PROGRESS' - }, - reportFetchStatus: { ...defaultFetchStatus }, - - reportWorkloadSummary: null, - reportWorkloadSummaryFetchStatus: { ...defaultFetchStatus }, - reportWorkloadsDetected: { - total: 0, - items: [] - }, - reportWorkloadsDetectedFetchStatus: { ...defaultFetchStatus }, - reportFlags: { - total: 0, - items: [] - }, - reportFlagsFetchStatus: { ...defaultFetchStatus }, - - reportInitialSavingEstimation: null, - reportInitialSavingEstimationFetchStatus: { ...defaultFetchStatus }, - - reportWorkloadInventory: { - total: 0, - items: [] - }, - reportWorkloadInventoryFetchStatus: { ...defaultFetchStatus }, - reportWorkloadInventoryAllCSVFetchStatus: { ...defaultFetchStatus }, - reportWorkloadInventoryFilteredCSVFetchStatus: { ...defaultFetchStatus }, - reportWorkloadInventoryAvailableFilters: null, - reportWorkloadInventoryAvailableFiltersFetchStatus: { ...defaultFetchStatus }, - - reportPayloadDownloadLinkFetchStatus: { ...defaultFetchStatus } + payloadName: 'file1.json', + inserted: 546785214, + lastUpdate: 546785214, + status: 'IN_PROGRESS', + }, + ], + }, + reportsFetchStatus: { ...defaultFetchStatus }, + + report: { + id: 37, + reportName: 'my report name 37', + reportDescription: 'my report description 37', + payloadName: 'file2.json', + inserted: 546425465, + lastUpdate: 546425465, + status: 'IN_PROGRESS', + }, + reportFetchStatus: { ...defaultFetchStatus }, + + reportWorkloadSummary: null, + reportWorkloadSummaryFetchStatus: { ...defaultFetchStatus }, + reportWorkloadsDetected: { + total: 0, + items: [], + }, + reportWorkloadsDetectedFetchStatus: { ...defaultFetchStatus }, + reportFlags: { + total: 0, + items: [], + }, + reportFlagsFetchStatus: { ...defaultFetchStatus }, + + reportInitialSavingEstimation: null, + reportInitialSavingEstimationFetchStatus: { ...defaultFetchStatus }, + + reportWorkloadInventory: { + total: 0, + items: [], + }, + reportWorkloadInventoryFetchStatus: { ...defaultFetchStatus }, + reportWorkloadInventoryAllCSVFetchStatus: { ...defaultFetchStatus }, + reportWorkloadInventoryFilteredCSVFetchStatus: { ...defaultFetchStatus }, + reportWorkloadInventoryAvailableFilters: null, + reportWorkloadInventoryAvailableFiltersFetchStatus: { ...defaultFetchStatus }, + + reportPayloadDownloadLinkFetchStatus: { ...defaultFetchStatus }, }; const fromRequest = (type: string, payload: any, meta = {}) => ({ - type, - payload, - meta: { partial: false, ...meta } + type, + payload, + meta: { partial: false, ...meta }, }); describe('report reducer', () => { - it('should return the default system state', () => { - const initialState = undefined; - const action = {} as GenericAction; - - expect(reportsReducer(initialState, action)).toEqual(systemInitialState); - }); - - it('should handle FETCH_REPORTS_PENDING', () => { - const expectedNewState: ReportState = { - ...reportTestInitialState, - reportsFetchStatus: { - error: null, - status: 'inProgress' - } - }; - - const newState: ReportState = reportsReducer( - reportTestInitialState, - fromRequest(pendingMessage(ActionTypes.FETCH_REPORTS), {}) - ); - - expect(newState).toEqual(expectedNewState); - }); - - it('should handle FETCH_REPORT_PENDING', () => { - const expectedNewState: ReportState = { - ...reportTestInitialState, - report: null, - reportFetchStatus: { - error: null, - status: 'inProgress' - } - }; - - const newState: ReportState = reportsReducer( - reportTestInitialState, - fromRequest(pendingMessage(ActionTypes.FETCH_REPORT), {}) - ); - - expect(newState).toEqual(expectedNewState); - }); - - it('should handle FETCH_REPORTS_SUCCESS', () => { - const total = 100; - - const expectedNewState: ReportState = { - ...reportTestInitialState, - reports: { - total, - items: reportsMock.data - }, - reportsFetchStatus: { - error: null, - status: 'complete' - } - }; - - const newState: ReportState = reportsReducer( - reportTestInitialState, - fromRequest(successMessage(ActionTypes.FETCH_REPORTS), { - data: { - data: [...reportsMock.data], - meta: { - count: total - } - } - }) - ); - - expect(newState).toEqual(expectedNewState); - }); - - it('should handle FETCH_REPORT_SUCCESS', () => { - const testReport: Report = reportMock.data; - - const expectedNewState: ReportState = { - ...reportTestInitialState, - report: testReport, - reportFetchStatus: { - error: null, - status: 'complete' - } - }; - - const newState: ReportState = reportsReducer( - reportTestInitialState, - fromRequest(successMessage(ActionTypes.FETCH_REPORT), reportMock) - ); - - expect(newState).toEqual(expectedNewState); - }); - - it('should handle FETCH_REPORTS_FAILURE', () => { - const error = 'my error message'; - - const expectedNewState: ReportState = { - ...reportTestInitialState, - reports: { - items: [], - total: 0 - }, - reportsFetchStatus: { - error, - status: 'complete' - } - }; - const newState: ReportState = reportsReducer( - reportTestInitialState, - fromRequest(failureMessage(ActionTypes.FETCH_REPORTS), { message: error }) - ); - - expect(newState).toEqual(expectedNewState); - }); - - it('should handle FETCH_REPORT_FAILURE', () => { - const error = 'my error message'; - - const expectedNewState: ReportState = { - ...reportTestInitialState, - report: null, - reportFetchStatus: { - error, - status: 'complete' - } - }; - - const newState: ReportState = reportsReducer( - reportTestInitialState, - fromRequest(failureMessage(ActionTypes.FETCH_REPORT), { message: error }) - ); - - expect(newState).toEqual(expectedNewState); - }); + it('should return the default system state', () => { + const initialState = undefined; + const action = {} as GenericAction; + + expect(reportsReducer(initialState, action)).toEqual(systemInitialState); + }); + + it('should handle FETCH_REPORTS_PENDING', () => { + const expectedNewState: ReportState = { + ...reportTestInitialState, + reportsFetchStatus: { + error: null, + status: 'inProgress', + }, + }; + + const newState: ReportState = reportsReducer( + reportTestInitialState, + fromRequest(pendingMessage(ActionTypes.FETCH_REPORTS), {}) + ); + + expect(newState).toEqual(expectedNewState); + }); + + it('should handle FETCH_REPORT_PENDING', () => { + const expectedNewState: ReportState = { + ...reportTestInitialState, + report: null, + reportFetchStatus: { + error: null, + status: 'inProgress', + }, + }; + + const newState: ReportState = reportsReducer( + reportTestInitialState, + fromRequest(pendingMessage(ActionTypes.FETCH_REPORT), {}) + ); + + expect(newState).toEqual(expectedNewState); + }); + + it('should handle FETCH_REPORTS_SUCCESS', () => { + const total = 100; + + const expectedNewState: ReportState = { + ...reportTestInitialState, + reports: { + total, + items: reportsMock.data, + }, + reportsFetchStatus: { + error: null, + status: 'complete', + }, + }; + + const newState: ReportState = reportsReducer( + reportTestInitialState, + fromRequest(successMessage(ActionTypes.FETCH_REPORTS), { + data: { + data: [...reportsMock.data], + meta: { + count: total, + }, + }, + }) + ); + + expect(newState).toEqual(expectedNewState); + }); + + it('should handle FETCH_REPORT_SUCCESS', () => { + const testReport: Report = reportMock.data; + + const expectedNewState: ReportState = { + ...reportTestInitialState, + report: testReport, + reportFetchStatus: { + error: null, + status: 'complete', + }, + }; + + const newState: ReportState = reportsReducer( + reportTestInitialState, + fromRequest(successMessage(ActionTypes.FETCH_REPORT), reportMock) + ); + + expect(newState).toEqual(expectedNewState); + }); + + it('should handle FETCH_REPORTS_FAILURE', () => { + const error = 'my error message'; + + const expectedNewState: ReportState = { + ...reportTestInitialState, + reports: { + items: [], + total: 0, + }, + reportsFetchStatus: { + error, + status: 'complete', + }, + }; + const newState: ReportState = reportsReducer( + reportTestInitialState, + fromRequest(failureMessage(ActionTypes.FETCH_REPORTS), { message: error }) + ); + + expect(newState).toEqual(expectedNewState); + }); + + it('should handle FETCH_REPORT_FAILURE', () => { + const error = 'my error message'; + + const expectedNewState: ReportState = { + ...reportTestInitialState, + report: null, + reportFetchStatus: { + error, + status: 'complete', + }, + }; + + const newState: ReportState = reportsReducer( + reportTestInitialState, + fromRequest(failureMessage(ActionTypes.FETCH_REPORT), { message: error }) + ); + + expect(newState).toEqual(expectedNewState); + }); }); diff --git a/src/reducers/ReportsReducer.tsx b/src/reducers/ReportsReducer.tsx index 0e78c957..298c1708 100644 --- a/src/reducers/ReportsReducer.tsx +++ b/src/reducers/ReportsReducer.tsx @@ -4,562 +4,562 @@ import { ReportState, ObjectFetchStatus } from '../models/state'; import { GenericAction } from '../models/action'; export const defaultFetchStatus: ObjectFetchStatus = { - error: null, - status: 'none' + error: null, + status: 'none', }; export const initialState: ReportState = { - report: null, - reportFetchStatus: { - ...defaultFetchStatus - }, - - reports: { - total: 0, - items: [] - }, - reportsFetchStatus: { - ...defaultFetchStatus - }, - - reportWorkloadSummary: null, - reportWorkloadSummaryFetchStatus: { - ...defaultFetchStatus - }, - reportWorkloadsDetected: { - total: 0, - items: [] - }, - reportWorkloadsDetectedFetchStatus: { - ...defaultFetchStatus - }, - reportFlags: { - total: 0, - items: [] - }, - reportFlagsFetchStatus: { - ...defaultFetchStatus - }, - - reportInitialSavingEstimation: null, - reportInitialSavingEstimationFetchStatus: { - ...defaultFetchStatus - }, - - reportWorkloadInventory: { - total: 0, - items: [] - }, - reportWorkloadInventoryFetchStatus: { - ...defaultFetchStatus - }, - reportWorkloadInventoryAllCSVFetchStatus: { - ...defaultFetchStatus - }, - reportWorkloadInventoryFilteredCSVFetchStatus: { - ...defaultFetchStatus - }, - reportWorkloadInventoryAvailableFilters: null, - reportWorkloadInventoryAvailableFiltersFetchStatus: { - ...defaultFetchStatus - }, - - reportPayloadDownloadLinkFetchStatus: { - ...defaultFetchStatus - } + report: null, + reportFetchStatus: { + ...defaultFetchStatus, + }, + + reports: { + total: 0, + items: [], + }, + reportsFetchStatus: { + ...defaultFetchStatus, + }, + + reportWorkloadSummary: null, + reportWorkloadSummaryFetchStatus: { + ...defaultFetchStatus, + }, + reportWorkloadsDetected: { + total: 0, + items: [], + }, + reportWorkloadsDetectedFetchStatus: { + ...defaultFetchStatus, + }, + reportFlags: { + total: 0, + items: [], + }, + reportFlagsFetchStatus: { + ...defaultFetchStatus, + }, + + reportInitialSavingEstimation: null, + reportInitialSavingEstimationFetchStatus: { + ...defaultFetchStatus, + }, + + reportWorkloadInventory: { + total: 0, + items: [], + }, + reportWorkloadInventoryFetchStatus: { + ...defaultFetchStatus, + }, + reportWorkloadInventoryAllCSVFetchStatus: { + ...defaultFetchStatus, + }, + reportWorkloadInventoryFilteredCSVFetchStatus: { + ...defaultFetchStatus, + }, + reportWorkloadInventoryAvailableFilters: null, + reportWorkloadInventoryAvailableFiltersFetchStatus: { + ...defaultFetchStatus, + }, + + reportPayloadDownloadLinkFetchStatus: { + ...defaultFetchStatus, + }, }; export const reportsReducer = (state: ReportState = initialState, action: GenericAction) => { - switch (action.type) { - // FETCH_REPORTS list of reports - case pendingMessage(ActionTypes.FETCH_REPORTS): { - const nextState: ReportState = { - ...state, - reportsFetchStatus: { - ...state.reportsFetchStatus, - error: null, - status: 'inProgress' - } - }; - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORTS): { - const nextState: ReportState = { - ...state, - reports: { - ...state.reports, - items: action.payload.data.data, - total: action.payload.data.meta.count - }, - reportsFetchStatus: { - ...state.reportsFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORTS): { - const nextState: ReportState = { - ...state, - reports: { - ...state.reports, - items: [], - total: 0 - }, - reportsFetchStatus: { - ...state.reportsFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT single report - case pendingMessage(ActionTypes.FETCH_REPORT): { - const nextState: ReportState = { - ...state, - report: null, - reportFetchStatus: { - ...state.reportFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT): { - const nextState: ReportState = { - ...state, - report: action.payload.data, - reportFetchStatus: { - ...state.reportFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT): { - const nextState: ReportState = { - ...state, - report: null, - reportFetchStatus: { - ...state.reportFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // DELETE_REPORT single report - case successMessage(ActionTypes.DELETE_REPORT): { - const nextState: ReportState = { - ...state, - reports: { - ...state.reports, - total: state.reports.total - 1, - items: state.reports.items.filter(r => r.id !== action.payload.id) - } - }; - return nextState; - } - - case failureMessage(ActionTypes.DELETE_REPORT): { - const nextState: ReportState = { - ...state - }; - return nextState; - } - - // FETCH_REPORT_WORKLOAD_SUMMARY single report - case pendingMessage(ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY): { - const nextState: ReportState = { - ...state, - reportWorkloadSummaryFetchStatus: { - ...state.reportWorkloadSummaryFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY): { - const nextState: ReportState = { - ...state, - reportWorkloadSummary: action.payload.data, - reportWorkloadSummaryFetchStatus: { - ...state.reportWorkloadSummaryFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY): { - const nextState: ReportState = { - ...state, - reportWorkloadSummary: null, - reportWorkloadSummaryFetchStatus: { - ...state.reportWorkloadSummaryFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_WORKLOADS_DETECTED single report - case pendingMessage(ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED): { - const nextState: ReportState = { - ...state, - reportWorkloadsDetectedFetchStatus: { - ...state.reportWorkloadsDetectedFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED): { - const nextState: ReportState = { - ...state, - reportWorkloadsDetected: { - ...state.reportWorkloadsDetected, - items: action.payload.data.data, - total: action.payload.data.meta.count - }, - reportWorkloadsDetectedFetchStatus: { - ...state.reportWorkloadsDetectedFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED): { - const nextState: ReportState = { - ...state, - reportWorkloadsDetected: { - ...state.reportWorkloadsDetected, - items: [], - total: 0 - }, - reportWorkloadsDetectedFetchStatus: { - ...state.reportWorkloadsDetectedFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_FLAGS single report - case pendingMessage(ActionTypes.FETCH_REPORT_FLAGS): { - const nextState: ReportState = { - ...state, - reportFlagsFetchStatus: { - ...state.reportFlagsFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_FLAGS): { - const nextState: ReportState = { - ...state, - reportFlags: { - ...state.reportFlags, - items: action.payload.data.data, - total: action.payload.data.meta.count - }, - reportFlagsFetchStatus: { - ...state.reportFlagsFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_FLAGS): { - const nextState: ReportState = { - ...state, - reportFlags: { - ...state.reportFlags, - items: [], - total: 0 - }, - reportFlagsFetchStatus: { - ...state.reportFlagsFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_INITIAL_SAVING_ESTIMATION single report - case pendingMessage(ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION): { - const nextState: ReportState = { - ...state, - reportInitialSavingEstimation: null, - reportInitialSavingEstimationFetchStatus: { - ...state.reportInitialSavingEstimationFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION): { - const nextState: ReportState = { - ...state, - reportInitialSavingEstimation: action.payload.data, - reportInitialSavingEstimationFetchStatus: { - ...state.reportInitialSavingEstimationFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION): { - const nextState: ReportState = { - ...state, - reportInitialSavingEstimation: null, - reportInitialSavingEstimationFetchStatus: { - ...state.reportInitialSavingEstimationFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_WOKLOAD_INVENTORY single report - case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryFetchStatus: { - ...state.reportWorkloadInventoryFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY): { - const nextState: ReportState = { - ...state, - reportWorkloadInventory: { - ...state.reportWorkloadInventory, - items: action.payload.data.data, - total: action.payload.data.meta.count - }, - reportWorkloadInventoryFetchStatus: { - ...state.reportWorkloadInventoryFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY): { - const nextState: ReportState = { - ...state, - reportWorkloadInventory: { - ...state.reportWorkloadInventory, - items: [], - total: 0 - }, - reportWorkloadInventoryFetchStatus: { - ...state.reportWorkloadInventoryFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV single report - case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryAllCSVFetchStatus: { - ...state.reportWorkloadInventoryAllCSVFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryAllCSVFetchStatus: { - ...state.reportWorkloadInventoryAllCSVFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryAllCSVFetchStatus: { - ...state.reportWorkloadInventoryAllCSVFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV single report - case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryFilteredCSVFetchStatus: { - ...state.reportWorkloadInventoryFilteredCSVFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryFilteredCSVFetchStatus: { - ...state.reportWorkloadInventoryFilteredCSVFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryFilteredCSVFetchStatus: { - ...state.reportWorkloadInventoryFilteredCSVFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS - case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryAvailableFilters: null, - reportWorkloadInventoryAvailableFiltersFetchStatus: { - ...state.reportWorkloadInventoryAvailableFiltersFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryAvailableFilters: action.payload.data, - reportWorkloadInventoryAvailableFiltersFetchStatus: { - ...state.reportWorkloadInventoryAvailableFiltersFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS): { - const nextState: ReportState = { - ...state, - reportWorkloadInventoryAvailableFilters: null, - reportWorkloadInventoryAvailableFiltersFetchStatus: { - ...state.reportWorkloadInventoryAvailableFiltersFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - // FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK - case pendingMessage(ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK): { - const nextState: ReportState = { - ...state, - reportPayloadDownloadLinkFetchStatus: { - ...state.reportPayloadDownloadLinkFetchStatus, - error: null, - status: 'inProgress' - } - }; - - return nextState; - } - - case successMessage(ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK): { - const nextState: ReportState = { - ...state, - reportPayloadDownloadLinkFetchStatus: { - ...state.reportPayloadDownloadLinkFetchStatus, - error: null, - status: 'complete' - } - }; - return nextState; - } - - case failureMessage(ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK): { - const nextState: ReportState = { - ...state, - reportPayloadDownloadLinkFetchStatus: { - ...state.reportPayloadDownloadLinkFetchStatus, - error: action.payload.message, - status: 'complete' - } - }; - return nextState; - } - - default: - return state; + switch (action.type) { + // FETCH_REPORTS list of reports + case pendingMessage(ActionTypes.FETCH_REPORTS): { + const nextState: ReportState = { + ...state, + reportsFetchStatus: { + ...state.reportsFetchStatus, + error: null, + status: 'inProgress', + }, + }; + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORTS): { + const nextState: ReportState = { + ...state, + reports: { + ...state.reports, + items: action.payload.data.data, + total: action.payload.data.meta.count, + }, + reportsFetchStatus: { + ...state.reportsFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORTS): { + const nextState: ReportState = { + ...state, + reports: { + ...state.reports, + items: [], + total: 0, + }, + reportsFetchStatus: { + ...state.reportsFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT single report + case pendingMessage(ActionTypes.FETCH_REPORT): { + const nextState: ReportState = { + ...state, + report: null, + reportFetchStatus: { + ...state.reportFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT): { + const nextState: ReportState = { + ...state, + report: action.payload.data, + reportFetchStatus: { + ...state.reportFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT): { + const nextState: ReportState = { + ...state, + report: null, + reportFetchStatus: { + ...state.reportFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // DELETE_REPORT single report + case successMessage(ActionTypes.DELETE_REPORT): { + const nextState: ReportState = { + ...state, + reports: { + ...state.reports, + total: state.reports.total - 1, + items: state.reports.items.filter((r) => r.id !== action.payload.id), + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.DELETE_REPORT): { + const nextState: ReportState = { + ...state, + }; + return nextState; + } + + // FETCH_REPORT_WORKLOAD_SUMMARY single report + case pendingMessage(ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY): { + const nextState: ReportState = { + ...state, + reportWorkloadSummaryFetchStatus: { + ...state.reportWorkloadSummaryFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY): { + const nextState: ReportState = { + ...state, + reportWorkloadSummary: action.payload.data, + reportWorkloadSummaryFetchStatus: { + ...state.reportWorkloadSummaryFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_WORKLOAD_SUMMARY): { + const nextState: ReportState = { + ...state, + reportWorkloadSummary: null, + reportWorkloadSummaryFetchStatus: { + ...state.reportWorkloadSummaryFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_WORKLOADS_DETECTED single report + case pendingMessage(ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED): { + const nextState: ReportState = { + ...state, + reportWorkloadsDetectedFetchStatus: { + ...state.reportWorkloadsDetectedFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED): { + const nextState: ReportState = { + ...state, + reportWorkloadsDetected: { + ...state.reportWorkloadsDetected, + items: action.payload.data.data, + total: action.payload.data.meta.count, + }, + reportWorkloadsDetectedFetchStatus: { + ...state.reportWorkloadsDetectedFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_WORKLOADS_DETECTED): { + const nextState: ReportState = { + ...state, + reportWorkloadsDetected: { + ...state.reportWorkloadsDetected, + items: [], + total: 0, + }, + reportWorkloadsDetectedFetchStatus: { + ...state.reportWorkloadsDetectedFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_FLAGS single report + case pendingMessage(ActionTypes.FETCH_REPORT_FLAGS): { + const nextState: ReportState = { + ...state, + reportFlagsFetchStatus: { + ...state.reportFlagsFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_FLAGS): { + const nextState: ReportState = { + ...state, + reportFlags: { + ...state.reportFlags, + items: action.payload.data.data, + total: action.payload.data.meta.count, + }, + reportFlagsFetchStatus: { + ...state.reportFlagsFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_FLAGS): { + const nextState: ReportState = { + ...state, + reportFlags: { + ...state.reportFlags, + items: [], + total: 0, + }, + reportFlagsFetchStatus: { + ...state.reportFlagsFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_INITIAL_SAVING_ESTIMATION single report + case pendingMessage(ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION): { + const nextState: ReportState = { + ...state, + reportInitialSavingEstimation: null, + reportInitialSavingEstimationFetchStatus: { + ...state.reportInitialSavingEstimationFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; } + + case successMessage(ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION): { + const nextState: ReportState = { + ...state, + reportInitialSavingEstimation: action.payload.data, + reportInitialSavingEstimationFetchStatus: { + ...state.reportInitialSavingEstimationFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_INITIAL_SAVING_ESTIMATION): { + const nextState: ReportState = { + ...state, + reportInitialSavingEstimation: null, + reportInitialSavingEstimationFetchStatus: { + ...state.reportInitialSavingEstimationFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_WOKLOAD_INVENTORY single report + case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryFetchStatus: { + ...state.reportWorkloadInventoryFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY): { + const nextState: ReportState = { + ...state, + reportWorkloadInventory: { + ...state.reportWorkloadInventory, + items: action.payload.data.data, + total: action.payload.data.meta.count, + }, + reportWorkloadInventoryFetchStatus: { + ...state.reportWorkloadInventoryFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY): { + const nextState: ReportState = { + ...state, + reportWorkloadInventory: { + ...state.reportWorkloadInventory, + items: [], + total: 0, + }, + reportWorkloadInventoryFetchStatus: { + ...state.reportWorkloadInventoryFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV single report + case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryAllCSVFetchStatus: { + ...state.reportWorkloadInventoryAllCSVFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryAllCSVFetchStatus: { + ...state.reportWorkloadInventoryAllCSVFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_ALL_CSV): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryAllCSVFetchStatus: { + ...state.reportWorkloadInventoryAllCSVFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV single report + case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryFilteredCSVFetchStatus: { + ...state.reportWorkloadInventoryFilteredCSVFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryFilteredCSVFetchStatus: { + ...state.reportWorkloadInventoryFilteredCSVFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_FILTERED_CSV): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryFilteredCSVFetchStatus: { + ...state.reportWorkloadInventoryFilteredCSVFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS + case pendingMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryAvailableFilters: null, + reportWorkloadInventoryAvailableFiltersFetchStatus: { + ...state.reportWorkloadInventoryAvailableFiltersFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryAvailableFilters: action.payload.data, + reportWorkloadInventoryAvailableFiltersFetchStatus: { + ...state.reportWorkloadInventoryAvailableFiltersFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_WOKLOAD_INVENTORY_AVAILABLE_FILTERS): { + const nextState: ReportState = { + ...state, + reportWorkloadInventoryAvailableFilters: null, + reportWorkloadInventoryAvailableFiltersFetchStatus: { + ...state.reportWorkloadInventoryAvailableFiltersFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + // FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK + case pendingMessage(ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK): { + const nextState: ReportState = { + ...state, + reportPayloadDownloadLinkFetchStatus: { + ...state.reportPayloadDownloadLinkFetchStatus, + error: null, + status: 'inProgress', + }, + }; + + return nextState; + } + + case successMessage(ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK): { + const nextState: ReportState = { + ...state, + reportPayloadDownloadLinkFetchStatus: { + ...state.reportPayloadDownloadLinkFetchStatus, + error: null, + status: 'complete', + }, + }; + return nextState; + } + + case failureMessage(ActionTypes.FETCH_REPORT_PAYLOAD_DOWNLOAD_LINK): { + const nextState: ReportState = { + ...state, + reportPayloadDownloadLinkFetchStatus: { + ...state.reportPayloadDownloadLinkFetchStatus, + error: action.payload.message, + status: 'complete', + }, + }; + return nextState; + } + + default: + return state; + } }; diff --git a/src/reducers/UploadsReducer.test.tsx b/src/reducers/UploadsReducer.test.tsx index 0d81f0db..56bb8812 100644 --- a/src/reducers/UploadsReducer.test.tsx +++ b/src/reducers/UploadsReducer.test.tsx @@ -6,132 +6,132 @@ import { GenericAction } from '../models/action'; import { UploadState } from '../models/state'; const uploadInitialState: UploadState = { - file: new File([''], 'myFile1.zip'), - success: null, - error: null, - progress: 0, - uploading: false + file: new File([''], 'myFile1.zip'), + success: null, + error: null, + progress: 0, + uploading: false, }; const fromRequest = (type: string, payload: any, meta = {}) => ({ - type, - payload, - meta: { partial: false, ...meta } + type, + payload, + meta: { partial: false, ...meta }, }); describe('report reducer', () => { - it('should return the default state', () => { - const initialState = undefined; - const action = {} as GenericAction; - - expect(uploadsReducer(initialState, action)).toEqual(systemInitialState); - }); - - it('should return the previous state', () => { - const initialState: UploadState = { - file: new File([''], 'myFile.zip'), - success: false, - error: 'my custom error', - progress: 90, - uploading: true - }; - const action = {} as GenericAction; - - expect(uploadsReducer(initialState, action)).toEqual(initialState); - }); - - it('should handle SELECT_UPLOAD_FILE', () => { - const payload = { - file: new File([''], 'myFile.zip') - }; - - const expectedNewState: UploadState = { - ...uploadInitialState, - file: payload.file, - success: null, - error: null, - progress: 0, - uploading: false - }; - const newState: UploadState = uploadsReducer( - uploadInitialState, - fromRequest(ActionTypes.SELECT_UPLOAD_FILE, payload) - ); - - expect(newState).toEqual(expectedNewState); - }); - - it('should handle UPLOAD_PROGRESS', () => { - const payload = { - progress: 20 - }; - - const expectedNewState: UploadState = { - ...uploadInitialState, - progress: payload.progress - }; - - const newState: UploadState = uploadsReducer( - uploadInitialState, - fromRequest(ActionTypes.UPLOAD_PROGRESS, payload) - ); - expect(newState).toEqual(expectedNewState); - }); - - it('should handle UPLOAD_REQUEST_PENDING', () => { - const payload = {}; - const meta = { - file: new File([''], 'myFile.zip') - }; - - const expectedNewState: UploadState = { - ...uploadInitialState, - error: null, - success: null, - progress: 0, - uploading: true, - file: meta.file - }; - - const newState: UploadState = uploadsReducer( - uploadInitialState, - fromRequest(pendingMessage(ActionTypes.UPLOAD_REQUEST), payload, meta) - ); - expect(newState).toEqual(expectedNewState); - }); - - it('should handle UPLOAD_REQUEST_FULFILLED', () => { - const payload = {}; - - const expectedNewState: UploadState = { - ...uploadInitialState, - success: true, - uploading: false - }; - - const newState: UploadState = uploadsReducer( - uploadInitialState, - fromRequest(successMessage(ActionTypes.UPLOAD_REQUEST), payload) - ); - expect(newState).toEqual(expectedNewState); - }); - - it('should handle UPLOAD_REQUEST_REJECTED', () => { - const payload = { - message: 'my custom error message' - }; - - const expectedNewState: UploadState = { - ...uploadInitialState, - error: payload.message, - success: false, - uploading: false - }; - - const newState: UploadState = uploadsReducer( - uploadInitialState, - fromRequest(failureMessage(ActionTypes.UPLOAD_REQUEST), payload) - ); - expect(newState).toEqual(expectedNewState); - }); + it('should return the default state', () => { + const initialState = undefined; + const action = {} as GenericAction; + + expect(uploadsReducer(initialState, action)).toEqual(systemInitialState); + }); + + it('should return the previous state', () => { + const initialState: UploadState = { + file: new File([''], 'myFile.zip'), + success: false, + error: 'my custom error', + progress: 90, + uploading: true, + }; + const action = {} as GenericAction; + + expect(uploadsReducer(initialState, action)).toEqual(initialState); + }); + + it('should handle SELECT_UPLOAD_FILE', () => { + const payload = { + file: new File([''], 'myFile.zip'), + }; + + const expectedNewState: UploadState = { + ...uploadInitialState, + file: payload.file, + success: null, + error: null, + progress: 0, + uploading: false, + }; + const newState: UploadState = uploadsReducer( + uploadInitialState, + fromRequest(ActionTypes.SELECT_UPLOAD_FILE, payload) + ); + + expect(newState).toEqual(expectedNewState); + }); + + it('should handle UPLOAD_PROGRESS', () => { + const payload = { + progress: 20, + }; + + const expectedNewState: UploadState = { + ...uploadInitialState, + progress: payload.progress, + }; + + const newState: UploadState = uploadsReducer( + uploadInitialState, + fromRequest(ActionTypes.UPLOAD_PROGRESS, payload) + ); + expect(newState).toEqual(expectedNewState); + }); + + it('should handle UPLOAD_REQUEST_PENDING', () => { + const payload = {}; + const meta = { + file: new File([''], 'myFile.zip'), + }; + + const expectedNewState: UploadState = { + ...uploadInitialState, + error: null, + success: null, + progress: 0, + uploading: true, + file: meta.file, + }; + + const newState: UploadState = uploadsReducer( + uploadInitialState, + fromRequest(pendingMessage(ActionTypes.UPLOAD_REQUEST), payload, meta) + ); + expect(newState).toEqual(expectedNewState); + }); + + it('should handle UPLOAD_REQUEST_FULFILLED', () => { + const payload = {}; + + const expectedNewState: UploadState = { + ...uploadInitialState, + success: true, + uploading: false, + }; + + const newState: UploadState = uploadsReducer( + uploadInitialState, + fromRequest(successMessage(ActionTypes.UPLOAD_REQUEST), payload) + ); + expect(newState).toEqual(expectedNewState); + }); + + it('should handle UPLOAD_REQUEST_REJECTED', () => { + const payload = { + message: 'my custom error message', + }; + + const expectedNewState: UploadState = { + ...uploadInitialState, + error: payload.message, + success: false, + uploading: false, + }; + + const newState: UploadState = uploadsReducer( + uploadInitialState, + fromRequest(failureMessage(ActionTypes.UPLOAD_REQUEST), payload) + ); + expect(newState).toEqual(expectedNewState); + }); }); diff --git a/src/reducers/UploadsReducer.tsx b/src/reducers/UploadsReducer.tsx index dad18dbf..a734388e 100644 --- a/src/reducers/UploadsReducer.tsx +++ b/src/reducers/UploadsReducer.tsx @@ -4,74 +4,74 @@ import { GenericAction } from '../models/action'; import { UploadState } from '../models/state'; export const initialState: UploadState = { - file: null, - success: null, - error: null, - progress: 0, - uploading: false + file: null, + success: null, + error: null, + progress: 0, + uploading: false, }; export const uploadsReducer = (state: UploadState = initialState, action: GenericAction) => { - switch (action.type) { - case ActionTypes.UPLOAD_PROGRESS: { - const nextState: UploadState = { - ...state, - progress: action.payload.progress - }; - return nextState; - } - - case ActionTypes.SELECT_UPLOAD_FILE: { - const nextState: UploadState = { - ...state, - error: null, - success: null, - progress: 0, - uploading: false, - file: action.payload.file - }; - return nextState; - } + switch (action.type) { + case ActionTypes.UPLOAD_PROGRESS: { + const nextState: UploadState = { + ...state, + progress: action.payload.progress, + }; + return nextState; + } - case ActionTypes.RESET_UPLOAD_FILE: { - return { - ...initialState - }; - } + case ActionTypes.SELECT_UPLOAD_FILE: { + const nextState: UploadState = { + ...state, + error: null, + success: null, + progress: 0, + uploading: false, + file: action.payload.file, + }; + return nextState; + } - // - case pendingMessage(ActionTypes.UPLOAD_REQUEST): { - const nextState: UploadState = { - ...state, - error: null, - success: null, - progress: 0, - uploading: true, - file: action.meta.file - }; - return nextState; - } + case ActionTypes.RESET_UPLOAD_FILE: { + return { + ...initialState, + }; + } - case successMessage(ActionTypes.UPLOAD_REQUEST): { - const nextState: UploadState = { - ...state, - success: true, - uploading: false - }; - return nextState; - } + // + case pendingMessage(ActionTypes.UPLOAD_REQUEST): { + const nextState: UploadState = { + ...state, + error: null, + success: null, + progress: 0, + uploading: true, + file: action.meta.file, + }; + return nextState; + } - case failureMessage(ActionTypes.UPLOAD_REQUEST): { - const nextState: UploadState = { - ...state, - error: action.payload.message, - success: false, - uploading: false - }; - return nextState; - } + case successMessage(ActionTypes.UPLOAD_REQUEST): { + const nextState: UploadState = { + ...state, + success: true, + uploading: false, + }; + return nextState; + } - default: - return state; + case failureMessage(ActionTypes.UPLOAD_REQUEST): { + const nextState: UploadState = { + ...state, + error: action.payload.message, + success: false, + uploading: false, + }; + return nextState; } + + default: + return state; + } }; diff --git a/src/reducers/UserReducer.tsx b/src/reducers/UserReducer.tsx index 1083b832..02d4b99e 100644 --- a/src/reducers/UserReducer.tsx +++ b/src/reducers/UserReducer.tsx @@ -4,64 +4,64 @@ import { UserState } from '../models/state'; import { GenericAction } from '../models/action'; export const initialState: UserState = { - user: null, - userFetchStatus: { - error: null, - status: 'none' - } + user: null, + userFetchStatus: { + error: null, + status: 'none', + }, }; export const userReducer = (state: UserState = initialState, action: GenericAction) => { - switch (action.type) { - case ActionTypes.UPDATE_USER: { - const nextState: UserState = { - ...state, - user: Object.assign({}, state.user, action.payload.user) - }; - - return nextState; - } + switch (action.type) { + case ActionTypes.UPDATE_USER: { + const nextState: UserState = { + ...state, + user: Object.assign({}, state.user, action.payload.user), + }; - case pendingMessage(ActionTypes.FETCH_USER): { - const nextState: UserState = { - ...state, - user: null, - userFetchStatus: { - error: null, - status: 'inProgress' - } - }; + return nextState; + } - return nextState; - } + case pendingMessage(ActionTypes.FETCH_USER): { + const nextState: UserState = { + ...state, + user: null, + userFetchStatus: { + error: null, + status: 'inProgress', + }, + }; - case successMessage(ActionTypes.FETCH_USER): { - const nextState: UserState = { - ...state, - user: action.payload.data, - userFetchStatus: { - error: null, - status: 'complete' - } - }; + return nextState; + } - return nextState; - } + case successMessage(ActionTypes.FETCH_USER): { + const nextState: UserState = { + ...state, + user: action.payload.data, + userFetchStatus: { + error: null, + status: 'complete', + }, + }; - case failureMessage(ActionTypes.FETCH_USER): { - const nextState: UserState = { - ...state, - user: null, - userFetchStatus: { - error: action.payload.message, - status: 'complete' - } - }; + return nextState; + } - return nextState; - } + case failureMessage(ActionTypes.FETCH_USER): { + const nextState: UserState = { + ...state, + user: null, + userFetchStatus: { + error: action.payload.message, + status: 'complete', + }, + }; - default: - return state; + return nextState; } + + default: + return state; + } }; diff --git a/src/reducers/__fixtures__/reports.tsx b/src/reducers/__fixtures__/reports.tsx index 6c9f93f3..67856d23 100644 --- a/src/reducers/__fixtures__/reports.tsx +++ b/src/reducers/__fixtures__/reports.tsx @@ -1,47 +1,47 @@ -import { Report } from "../../models"; +import { Report } from '../../models'; interface ListReponse { - data: Report[] + data: Report[]; } interface ObjectReponse { - data: Report + data: Report; } const reportsMock: ListReponse = { - data: [ - { - id: 36, - reportName: 'My report name 36', - reportDescription: 'My report description 36', - payloadName: 'file1.json', - inserted: 45654654455, - lastUpdate: 45654654456, - status: 'CREATED' - }, - { - id: 37, - reportName: 'My report name 37', - reportDescription: 'My report description 37', - payloadName: 'file2.json', - inserted: 1768876116, - lastUpdate: 1768876117, - status: 'CREATED' - }, - { - id: 38, - reportName: 'My report name 38', - reportDescription: 'My report description 38', - payloadName: 'file3.json', - inserted: 17353543153, - lastUpdate: 17353543154, - status: 'CREATED' - } - ] + data: [ + { + id: 36, + reportName: 'My report name 36', + reportDescription: 'My report description 36', + payloadName: 'file1.json', + inserted: 45654654455, + lastUpdate: 45654654456, + status: 'CREATED', + }, + { + id: 37, + reportName: 'My report name 37', + reportDescription: 'My report description 37', + payloadName: 'file2.json', + inserted: 1768876116, + lastUpdate: 1768876117, + status: 'CREATED', + }, + { + id: 38, + reportName: 'My report name 38', + reportDescription: 'My report description 38', + payloadName: 'file3.json', + inserted: 17353543153, + lastUpdate: 17353543154, + status: 'CREATED', + }, + ], }; export const reportMock: ObjectReponse = { - data: reportsMock.data[0] + data: reportsMock.data[0], }; export default reportsMock; diff --git a/src/reducers/reducerHelper.test.tsx b/src/reducers/reducerHelper.test.tsx index ab5a0aab..c6dcd882 100644 --- a/src/reducers/reducerHelper.test.tsx +++ b/src/reducers/reducerHelper.test.tsx @@ -1,37 +1,37 @@ import { successMessage, failureMessage, pendingMessage, initialStateFor } from './reducerHelper'; describe('initialStateFor', () => { - it('returns and object with the reducers initial object', () => { - expect(initialStateFor('data')).toEqual({ - data: [], - error: null, - loading: false - }); + it('returns and object with the reducers initial object', () => { + expect(initialStateFor('data')).toEqual({ + data: [], + error: null, + loading: false, }); + }); - it('can take a initial object argument', () => { - expect(initialStateFor('data', {})).toEqual({ - data: {}, - error: null, - loading: false - }); + it('can take a initial object argument', () => { + expect(initialStateFor('data', {})).toEqual({ + data: {}, + error: null, + loading: false, }); + }); }); describe('successMessage', () => { - it('appends _FULFILLED', () => { - expect(successMessage('FETCH')).toEqual('FETCH_FULFILLED'); - }); + it('appends _FULFILLED', () => { + expect(successMessage('FETCH')).toEqual('FETCH_FULFILLED'); + }); }); describe('failureMessage', () => { - it('appends _REJECTED', () => { - expect(failureMessage('FETCH')).toEqual('FETCH_REJECTED'); - }); + it('appends _REJECTED', () => { + expect(failureMessage('FETCH')).toEqual('FETCH_REJECTED'); + }); }); describe('pendingMessage', () => { - it('appends _PENDING', () => { - expect(pendingMessage('FETCH')).toEqual('FETCH_PENDING'); - }); + it('appends _PENDING', () => { + expect(pendingMessage('FETCH')).toEqual('FETCH_PENDING'); + }); }); diff --git a/src/reducers/reducerHelper.tsx b/src/reducers/reducerHelper.tsx index bc78e66f..b85a6ee5 100644 --- a/src/reducers/reducerHelper.tsx +++ b/src/reducers/reducerHelper.tsx @@ -1,22 +1,22 @@ export const defaultIntialState = { - loading: false, - error: null + loading: false, + error: null, }; export const initialStateFor = (reducerName: string, initialObject: any = []) => { - const initState: any = Object.assign({}, defaultIntialState); - initState[reducerName] = initialObject; - return initState; + const initState: any = Object.assign({}, defaultIntialState); + initState[reducerName] = initialObject; + return initState; }; export const successMessage = (base: string) => { - return base + '_FULFILLED'; + return base + '_FULFILLED'; }; export const pendingMessage = (base: string) => { - return base + '_PENDING'; + return base + '_PENDING'; }; export const failureMessage = (base: string) => { - return base + '_REJECTED'; + return base + '_REJECTED'; }; diff --git a/src/store/index.js b/src/store/index.js index a92afd0e..bb007442 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,6 +1,9 @@ import ReducerRegistry from '@redhat-cloud-services/frontend-components-utilities/files/ReducerRegistry'; import promiseMiddleware from 'redux-promise-middleware'; -import { notifications, notificationsMiddleware } from '@redhat-cloud-services/frontend-components-notifications'; +import { + notifications, + notificationsMiddleware, +} from '@redhat-cloud-services/frontend-components-notifications'; import { reportsReducer } from '../reducers/ReportsReducer'; import { uploadsReducer } from '../reducers/UploadsReducer'; import { userReducer } from '../reducers/UserReducer'; @@ -10,33 +13,33 @@ import { mappingsReducer } from '../reducers/MappingsReducer'; let registry; export function init(...middleware) { - if (registry) { - throw new Error('store already initialized'); - } + if (registry) { + throw new Error('store already initialized'); + } - registry = new ReducerRegistry({}, [ - promiseMiddleware(), - notificationsMiddleware({ autoDismiss: true }), - ...middleware - ]); + registry = new ReducerRegistry({}, [ + promiseMiddleware(), + notificationsMiddleware({ autoDismiss: true }), + ...middleware, + ]); - //If you want to register all of your reducers, this is good place. - registry.register({ - notifications, - reportState: reportsReducer, - uploadState: uploadsReducer, - userState: userReducer, - dialogDeleteState: dialogDeleteReducer, - mappingsState: mappingsReducer - }); + //If you want to register all of your reducers, this is good place. + registry.register({ + notifications, + reportState: reportsReducer, + uploadState: uploadsReducer, + userState: userReducer, + dialogDeleteState: dialogDeleteReducer, + mappingsState: mappingsReducer, + }); - return registry; + return registry; } export function getStore() { - return registry.getStore(); + return registry.getStore(); } export function register(...args) { - return registry.register(...args); + return registry.register(...args); } diff --git a/test-setup.js b/test-setup.js deleted file mode 100644 index 82edfc9e..00000000 --- a/test-setup.js +++ /dev/null @@ -1,4 +0,0 @@ -import { configure } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; - -configure({ adapter: new Adapter() }); diff --git a/tsconfig.json b/tsconfig.json index 10b97b2e..759bd624 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,31 +1,27 @@ { "compilerOptions": { - "baseUrl": ".", - "rootDir": ".", - "outDir": "dist", - "module": "esnext", "target": "es5", - "lib": ["es6", "dom"], - "sourceMap": true, - "jsx": "react", - "moduleResolution": "node", - "forceConsistentCasingInFileNames": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitAny": false, + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, + "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", "resolveJsonModule": true, - "paths": { - "@app/*": ["src/app/*"], - "@assets/*": ["node_modules/@patternfly/react-core/dist/styles/assets/*"] - }, + "isolatedModules": true, + "noEmit": false, + "jsx": "react", + "noImplicitAny": false, + "baseUrl": "src" }, "include": [ - "**/*.ts", - "**/*.tsx" - ], - "exclude": ["node_modules"] -} \ No newline at end of file + "src" + ] +} diff --git a/tslint.json b/tslint.json deleted file mode 100644 index dc75dfab..00000000 --- a/tslint.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "extends": ["tslint:recommended", "tslint-react", "tslint-eslint-rules", "tslint-config-prettier"], - "linterOptions": { - "exclude": [ - "**/node_modules/**/*.ts" - ] - }, - "rules": { - "ordered-imports": false, - "object-literal-sort-keys": false, - "interface-name" : [true, "never-prefix"], - "no-empty-interface": false, - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case" - ] - }, - "jsRules": { - "object-literal-sort-keys": false, - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case" - ] - } - } \ No newline at end of file