diff --git a/.circleci/config.yml b/.circleci/config.yml index becf059760f..c81f0da05bc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -55,8 +55,8 @@ commands: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" - nvm install v14.16.1 - nvm alias default 14.16.1 + nvm install v14.18.2 + nvm alias default 14.18.2 echo 'export NVM_DIR="$HOME/.nvm"' >> $BASH_ENV echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $BASH_ENV @@ -64,9 +64,9 @@ commands: # Restore cached Node dependencies - restore_cache: keys: - - v14.16.1-node-{{ checksum "client/yarn.lock" }} + - v14.18.2-node-{{ checksum "client/yarn.lock" }} # Fallback to using the latest cache if no exact match is found - - v14.16.1-node- + - v14.18.2-node- # Update Node dependencies - run: cd client && yarn install && cd - @@ -75,7 +75,7 @@ commands: - save_cache: paths: - ./client/node_modules - key: v14.16.1-node-{{ checksum "client/yarn.lock" }} + key: v14.18.2-node-{{ checksum "client/yarn.lock" }} build_client: steps: @@ -136,7 +136,7 @@ jobs: command: | bundle exec rake db:setup environment: - DATABASE_URL: "postgres://ubuntu@localhost:5432/coursemology_test" + DATABASE_URL: 'postgres://ubuntu@localhost:5432/coursemology_test' # Run tests! - run: @@ -154,7 +154,7 @@ jobs: --format progress \ $TEST_FILES environment: - DATABASE_URL: "postgres://ubuntu@localhost:5432/coursemology_test" + DATABASE_URL: 'postgres://ubuntu@localhost:5432/coursemology_test' # Collect reports - store_test_results: @@ -239,7 +239,7 @@ jobs: command: | bundle exec rake db:setup environment: - DATABASE_URL: "postgres://ubuntu@localhost:5432/coursemology_test" + DATABASE_URL: 'postgres://ubuntu@localhost:5432/coursemology_test' # Run i18n checks! - run: @@ -249,7 +249,7 @@ jobs: bundle exec i18n-tasks missing bundle exec rake factory_bot:lint environment: - DATABASE_URL: "postgres://ubuntu@localhost:5432/coursemology_test" + DATABASE_URL: 'postgres://ubuntu@localhost:5432/coursemology_test' workflows: version: 2 diff --git a/.gitignore b/.gitignore index be99088e094..336cf6e8a80 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,8 @@ # Ignore installed node libraries and log npm-debug.log* +yarn-debug.log* +yarn-error.log* node_modules # Ignore generated js bundles diff --git a/Gemfile b/Gemfile index a04af9f9fe8..6b6832500cb 100644 --- a/Gemfile +++ b/Gemfile @@ -213,11 +213,12 @@ gem 'simple_form' gem 'simple_form-bootstrap', git: 'https://github.com/raymondtangsc/simple_form-bootstrap' # Dynamic nested forms gem 'cocoon' +gem 'momentjs-rails' # Needed for bootstrap3-datetimepicker-rails gem 'bootstrap3-datetimepicker-rails' gem 'bootstrap-select-rails' gem 'bootstrap_tokenfield_rails' gem 'twitter-typeahead-rails' -gem 'summernote-rails' +gem 'summernote-rails', git: 'https://github.com/noesya/summernote-rails' # Using CarrierWave for file uploads gem 'carrierwave' diff --git a/Gemfile.lock b/Gemfile.lock index 4ffd021dac4..64be9d7b5fd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -43,6 +43,13 @@ GIT specs: rwordnet (2.0.0) +GIT + remote: https://github.com/noesya/summernote-rails + revision: 6dcff6c2a0e56492dbbcaf0a91ccc5898e6be922 + specs: + summernote-rails (0.8.20.1) + railties (>= 3.1) + GIT remote: https://github.com/raymondtangsc/rails_utils.git revision: 5c8c0caacf08985ae14c5d007529a09d5f284da0 @@ -365,7 +372,7 @@ GEM rake mini_magick (4.11.0) mini_mime (1.1.2) - mini_portile2 (2.6.1) + mini_portile2 (2.8.0) minitest (5.15.0) momentjs-rails (2.20.1) railties (>= 3.1) @@ -373,8 +380,8 @@ GEM mustermann (1.1.1) ruby2_keywords (~> 0.0.1) nio4r (2.5.8) - nokogiri (1.12.5) - mini_portile2 (~> 2.6.1) + nokogiri (1.13.3) + mini_portile2 (~> 2.8.0) racc (~> 1.4) orm_adapter (0.5.0) parallel (1.21.0) @@ -580,8 +587,6 @@ GEM sprockets (>= 3.0.0) ssrf_filter (1.0.7) stackprof (0.2.19) - summernote-rails (0.8.12.0) - railties (>= 3.1) temple (0.8.2) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -691,6 +696,7 @@ DEPENDENCIES loofah (>= 2.2.1) mimemagic (= 0.3.10) mini_magick + momentjs-rails nokogiri (>= 1.8.1) parallel_tests pg @@ -729,7 +735,7 @@ DEPENDENCIES spring sprockets (< 4.0.0) stackprof - summernote-rails + summernote-rails! themes_on_rails (>= 0.3.1)! traceroute twitter-typeahead-rails @@ -745,4 +751,4 @@ DEPENDENCIES yard BUNDLED WITH - 2.2.22 + 2.2.32 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 17a8259e88b..3a37974ef6f 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -14,6 +14,7 @@ //= require jquery_ujs //= require i18n/translations //= require js-routes +//= require moment //= require bootstrap-sprockets //= require bootstrap-datetimepicker //= require bootstrap-select diff --git a/app/assets/javascripts/course/discussion/topics.js b/app/assets/javascripts/course/discussion/topics.js index 944db373dda..f1e34eabfac 100644 --- a/app/assets/javascripts/course/discussion/topics.js +++ b/app/assets/javascripts/course/discussion/topics.js @@ -29,7 +29,7 @@ // TODO: Display error messages. } - $(document).ready(function () { + $(function () { showCommentBoxes(); DISCUSSION_POST_HELPERS.initializeToolbar(document, DOCUMENT_SELECTOR); }); diff --git a/app/assets/javascripts/helpers/discussion/post_helpers.js b/app/assets/javascripts/helpers/discussion/post_helpers.js index ad953c2c87e..c0939d8c3d3 100644 --- a/app/assets/javascripts/helpers/discussion/post_helpers.js +++ b/app/assets/javascripts/helpers/discussion/post_helpers.js @@ -31,7 +31,7 @@ var DISCUSSION_POST_HELPERS = (function ( * @param {String} selector The selector for the specific discussion posts. */ function initializeToolbar(element, selector) { - $(document).ready(function () { + $(function () { showCommentToolbar(element, selector); }); EVENT_HELPERS.onNodesInserted($(element), function (insertedElement) { diff --git a/app/assets/javascripts/layout.js b/app/assets/javascripts/layout.js index 724fde9fc07..ba6c63a301a 100644 --- a/app/assets/javascripts/layout.js +++ b/app/assets/javascripts/layout.js @@ -163,7 +163,7 @@ // // This prevents missing definitions for things like Ace themes, which are loaded after the // application script. - $(document).ready(function () { + $(function () { initializeComponents(document); EVENT_HELPERS.onNodesInserted($(document), initializeComponents); diff --git a/app/assets/javascripts/patches/dropdown_mobile_fix.js b/app/assets/javascripts/patches/dropdown_mobile_fix.js index 7fde8c0cda0..9ccd566d0af 100644 --- a/app/assets/javascripts/patches/dropdown_mobile_fix.js +++ b/app/assets/javascripts/patches/dropdown_mobile_fix.js @@ -11,7 +11,7 @@ }); } - $(document).ready(function () { + $(function () { initializeDropdownEventListener(); }); })(jQuery); diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index 54c82c9dcac..c9ae436c431 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -31,6 +31,12 @@ textarea.code { .note-editor { @extend .note-editor, .note-frame; @extend .panel; + + .note-popover .popover-content { + line-height: 2.5; + padding: 5px; + padding-right: 0; + } } table.codehilite { @@ -76,3 +82,20 @@ table.codehilite { .attachment-uploader { margin-bottom: 1em; } + +// Summernote defaults +$summernote-border-color: #e4e4e4; +$summernote-font-color: #000000; + +.note-editor, +.note-editor.note-airframe { + border: 1px solid $summernote-border-color; + overflow: visible; +} + +.note-editor.note-airframe .note-editing-area .note-editable, +.note-editor.note-frame .note-editing-area .note-editable, +.note-editor .note-editing-area .note-editable { + color: $summernote-font-color; + padding: 10px; +} diff --git a/client/.babelrc b/client/.babelrc index deb70ac63a0..5bbdc54c1f1 100644 --- a/client/.babelrc +++ b/client/.babelrc @@ -1,7 +1,12 @@ { "presets": [ "@babel/preset-env", - "@babel/preset-react", + [ + "@babel/preset-react", + { + "runtime": "automatic" + } + ] ], "plugins": [ "@babel/plugin-syntax-dynamic-import", diff --git a/client/.eslintrc.js b/client/.eslintrc.js index b6e1018b8b5..ed0acf05264 100644 --- a/client/.eslintrc.js +++ b/client/.eslintrc.js @@ -1,19 +1,28 @@ module.exports = { parser: 'babel-eslint', + plugins: ['jest'], extends: [ 'airbnb', 'eslint:recommended', 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:import/recommended', 'prettier', ], settings: { 'import/resolver': { - node: {}, - webpack: {}, + alias: { + map: [ + ['lib', './app/lib'], + ['api', './app/api'], + ['course', './app/bundles/course'], + ['testUtils', './app/__test__/utils'], + ], + extensions: ['.js', '.jsx'], + }, }, react: { - // TODO: Update this to 'detect' once React is upgraded >=16.9 - version: '16.8.6', + version: 'detect', }, }, rules: { @@ -34,7 +43,7 @@ module.exports = { 'jsx-a11y/mouse-events-have-key-events': 'off', 'jsx-a11y/no-static-element-interactions': 'off', 'max-len': ['warn', 120], - camelcase: ['warn', { properties: 'never' }], + camelcase: ['warn', { properties: 'never', allow: ['^UNSAFE_'] }], 'comma-dangle': ['error', 'always-multiline'], 'func-names': 'off', 'no-multi-str': 'off', @@ -55,4 +64,54 @@ module.exports = { File: true, FileReader: true, }, + overrides: [ + { + files: [ + '**/__test__/**/*.js', + '**/__test__/**/*.jsx', + '**/*.test.js', + '**/*.test.jsx', + '**/*.spec.js', + '**/*.spec.jsx', + ], + env: { + jest: true, + }, + globals: { + courseId: true, + intl: true, + intlShape: true, + sleep: true, + buildContextOptions: true, + localStorage: true, + }, + rules: { + 'jest/no-disabled-tests': 'error', + 'jest/no-focused-tests': 'error', + 'jest/no-alias-methods': 'error', + 'jest/no-identical-title': 'error', + 'jest/no-jasmine-globals': 'error', + 'jest/no-jest-import': 'error', + 'jest/no-test-prefixes': 'error', + 'jest/no-done-callback': 'error', + 'jest/no-test-return-statement': 'error', + 'jest/prefer-to-be': 'error', + 'jest/prefer-to-contain': 'error', + 'jest/prefer-to-have-length': 'error', + 'jest/prefer-spy-on': 'error', + 'jest/valid-expect': 'error', + 'jest/no-deprecated-functions': 'error', + 'react/no-find-dom-node': 'off', + 'react/jsx-filename-extension': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/extensions': 'off', + 'import/no-unresolved': [ + 'error', + { + ignore: ['utils/'], + }, + ], + }, + }, + ], }; diff --git a/client/.eslintrc.test b/client/.eslintrc.test deleted file mode 100644 index 18755ffda6a..00000000000 --- a/client/.eslintrc.test +++ /dev/null @@ -1,26 +0,0 @@ -{ - "extends": ".eslintrc.js", - "env": { - "jest": true - }, - "globals": { - "courseId": true, - "intl": true, - "intlShape": true, - "sleep": true, - "buildContextOptions": true, - "localStorage": true, - }, - "rules": { - "react/no-find-dom-node": "off", - "react/jsx-filename-extension": "off", - "import/no-extraneous-dependencies": "off", - "import/extensions": "off", - "import/no-unresolved": [ - "error", - { - "ignore": [ 'utils/' ] - } - ] - }, -} diff --git a/client/.prettierrc.js b/client/.prettierrc.js index 2ccf5c4bd93..b09b48c1e77 100644 --- a/client/.prettierrc.js +++ b/client/.prettierrc.js @@ -1,6 +1,11 @@ module.exports = { - semi: true, - trailingComma: 'all', arrowParens: 'always', + endOfLine: 'lf', + jsxSingleQuote: false, + quoteProps: 'as-needed', + semi: true, singleQuote: true, + tabWidth: 2, + trailingComma: 'all', + useTabs: false, }; diff --git a/client/app/__test__/setup.js b/client/app/__test__/setup.js index a4761af1e6b..087bd27781e 100644 --- a/client/app/__test__/setup.js +++ b/client/app/__test__/setup.js @@ -3,7 +3,7 @@ import { IntlProvider, intlShape } from 'react-intl'; import getMuiTheme from 'material-ui/styles/getMuiTheme'; import Enzyme from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; +import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; Enzyme.configure({ adapter: new Adapter() }); @@ -16,6 +16,7 @@ const intlProvider = new IntlProvider({ locale: 'en', timeZone }, {}); const courseId = '1'; const muiTheme = getMuiTheme(); +const intl = intlProvider.getChildContext().intl; const buildContextOptions = (store) => ({ context: { intl, store, muiTheme }, childContextTypes: { @@ -28,7 +29,7 @@ const buildContextOptions = (store) => ({ // Global variables global.courseId = courseId; global.window = window; -global.intl = intlProvider.getChildContext().intl; +global.intl = intl; global.intlShape = intlShape; global.muiTheme = muiTheme; global.$ = jQuery; @@ -50,8 +51,6 @@ global.sleep = sleep; // summernote does not work well with jsdom in tests, stub it to normal text field. jest.mock('lib/components/redux-form/RichTextField', () => { - const TextField = require.requireActual( - 'lib/components/redux-form/TextField', - ); + const TextField = jest.requireActual('lib/components/redux-form/TextField'); return TextField; }); diff --git a/client/app/__test__/utils/__test__/shallowUntil.test.js b/client/app/__test__/utils/__test__/shallowUntil.test.js index b9d4fffd94e..0da0448b436 100644 --- a/client/app/__test__/utils/__test__/shallowUntil.test.js +++ b/client/app/__test__/utils/__test__/shallowUntil.test.js @@ -1,11 +1,11 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import shallowUntil from '../shallowUntil'; describe('#shallowUntil', () => { const Div = () =>
; - const hoc = (Component) => { - const component = () => ; + const hoc = (Comp) => { + const component = () => ; return component; }; @@ -43,11 +43,12 @@ describe('#shallowUntil', () => { ).toBeTruthy(); }); - describe('with context', () => { + // eslint-disable-next-line jest/no-disabled-tests + describe.skip('with context', () => { const Foo = () =>
; Foo.contextTypes = { open: PropTypes.bool.isRequired }; - class Bar extends React.Component { + class Bar extends Component { getChildContext = () => ({ open: true }); render = () => ; @@ -55,21 +56,21 @@ describe('#shallowUntil', () => { Bar.childContextTypes = { open: PropTypes.bool }; - xit('passes down context from the root component', () => { + it('passes down context from the root component', () => { const EnhancedFoo = hoc(Foo); const wrapper = shallowUntil( , { context: { open: true } }, 'Foo', ); - expect(wrapper.context('open')).toEqual(true); + expect(wrapper.context('open')).toBe(true); expect(wrapper.contains(
)).toBeTruthy(); }); - xit('passes down context from an intermediary component', () => { + it('passes down context from an intermediary component', () => { const EnhancedBar = hoc(Bar); const wrapper = shallowUntil(, 'Foo'); - expect(wrapper.context('open')).toEqual(true); + expect(wrapper.context('open')).toBe(true); expect(wrapper.contains(
)).toBeTruthy(); }); }); diff --git a/client/app/__test__/utils/shallowUntil.js b/client/app/__test__/utils/shallowUntil.js index 12a7db7bae9..abcd189908a 100644 --- a/client/app/__test__/utils/shallowUntil.js +++ b/client/app/__test__/utils/shallowUntil.js @@ -38,7 +38,9 @@ function until(selector, options) { */ export default function shallowUntil(component, options, selector) { if (selector === undefined) { + // eslint-disable-next-line no-param-reassign selector = options; + // eslint-disable-next-line no-param-reassign options = undefined; } return until.call(shallow(component, options), selector, options); diff --git a/client/app/api/course/Admin/LessonPlan.js b/client/app/api/course/Admin/LessonPlan.js index 8f03bd019d4..5487477cd8f 100644 --- a/client/app/api/course/Admin/LessonPlan.js +++ b/client/app/api/course/Admin/LessonPlan.js @@ -5,13 +5,8 @@ export default class LessonPlanAPI extends BaseAdminAPI { * Update a lesson plan setting. * * @param {object} params - * - params in the format of { - * lesson_plan_settings: - * { - * lesson_plan_item_settings: - * { :component, :key, :enabled, :options } - * } - * } + * - params in the format of + * { lesson_plan_settings: { lesson_plan_item_settings: { :component, :key, :enabled, :options } } } * * @return {Promise} * success response: {} diff --git a/client/app/bundles/course/achievement/achievements-edit.jsx b/client/app/bundles/course/achievement/achievements-edit.jsx index 24d59961eb6..8e43041e6bd 100644 --- a/client/app/bundles/course/achievement/achievements-edit.jsx +++ b/client/app/bundles/course/achievement/achievements-edit.jsx @@ -1,10 +1,9 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from './store'; import AchievementEditPage from './pages/AchievementEdit'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('achievement-edit'); if (mountNode) { const dataAttr = mountNode.getAttribute('data'); diff --git a/client/app/bundles/course/achievement/achievements-index.jsx b/client/app/bundles/course/achievement/achievements-index.jsx index b5bef5d909a..c962c3e2989 100644 --- a/client/app/bundles/course/achievement/achievements-index.jsx +++ b/client/app/bundles/course/achievement/achievements-index.jsx @@ -1,10 +1,9 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from './store'; import AchievementIndexPage from './pages/AchievementIndex'; -$(document).ready(() => { +$(() => { const mountNode = $('.new-btn')[0]; if (mountNode) { diff --git a/client/app/bundles/course/achievement/achievements.js b/client/app/bundles/course/achievement/achievements.js index 143faa59ec2..f0caf89816e 100644 --- a/client/app/bundles/course/achievement/achievements.js +++ b/client/app/bundles/course/achievement/achievements.js @@ -78,6 +78,6 @@ function initializeReorderingButton() { }); } -$(document).ready(() => { +$(() => { initializeReorderingButton(); }); diff --git a/client/app/bundles/course/achievement/containers/AchievementForm/index.jsx b/client/app/bundles/course/achievement/containers/AchievementForm/index.jsx index 202850c4516..b823463b818 100644 --- a/client/app/bundles/course/achievement/containers/AchievementForm/index.jsx +++ b/client/app/bundles/course/achievement/containers/AchievementForm/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import { reduxForm, Field, Form } from 'redux-form'; diff --git a/client/app/bundles/course/achievement/pages/AchievementEdit/__test__/index.test.js b/client/app/bundles/course/achievement/pages/AchievementEdit/__test__/index.test.js index 40751f02696..1c7a92ecf10 100644 --- a/client/app/bundles/course/achievement/pages/AchievementEdit/__test__/index.test.js +++ b/client/app/bundles/course/achievement/pages/AchievementEdit/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import CourseAPI from 'api/course'; diff --git a/client/app/bundles/course/achievement/pages/AchievementEdit/index.jsx b/client/app/bundles/course/achievement/pages/AchievementEdit/index.jsx index ea4fb338309..1d53059b02c 100644 --- a/client/app/bundles/course/achievement/pages/AchievementEdit/index.jsx +++ b/client/app/bundles/course/achievement/pages/AchievementEdit/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { submit } from 'redux-form'; @@ -20,7 +20,7 @@ const styles = { }, }; -class EditPage extends React.Component { +class EditPage extends Component { onFormSubmit = (data) => { const attributes = { ...data }; const { intl } = this.props; diff --git a/client/app/bundles/course/achievement/pages/AchievementIndex/__test__/index.test.js b/client/app/bundles/course/achievement/pages/AchievementIndex/__test__/index.test.js index 80eaa46fb22..f19946f6683 100644 --- a/client/app/bundles/course/achievement/pages/AchievementIndex/__test__/index.test.js +++ b/client/app/bundles/course/achievement/pages/AchievementIndex/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from '../../../store'; diff --git a/client/app/bundles/course/achievement/pages/AchievementIndex/index.jsx b/client/app/bundles/course/achievement/pages/AchievementIndex/index.jsx index 3d8beaaf776..59ceb1c4347 100644 --- a/client/app/bundles/course/achievement/pages/AchievementIndex/index.jsx +++ b/client/app/bundles/course/achievement/pages/AchievementIndex/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { submit, isPristine } from 'redux-form'; @@ -27,7 +27,7 @@ const styles = { }, }; -class PopupDialog extends React.Component { +class PopupDialog extends Component { onFormSubmit = (data) => { const { intl } = this.props; @@ -40,10 +40,6 @@ class PopupDialog extends React.Component { ); }; - handleOpen = () => { - this.props.dispatch({ type: actionTypes.ACHIEVEMENT_FORM_SHOW }); - }; - handleClose = () => { this.props.dispatch({ type: actionTypes.ACHIEVEMENT_FORM_CANCEL, @@ -51,6 +47,10 @@ class PopupDialog extends React.Component { }); }; + handleOpen = () => { + this.props.dispatch({ type: actionTypes.ACHIEVEMENT_FORM_SHOW }); + }; + render() { const { intl, dispatch, badge } = this.props; diff --git a/client/app/bundles/course/admin/admin.js b/client/app/bundles/course/admin/admin.js index bcd0aeca8f0..6960fa6f164 100644 --- a/client/app/bundles/course/admin/admin.js +++ b/client/app/bundles/course/admin/admin.js @@ -1,4 +1,4 @@ -$(document).ready(() => { +$(() => { $('input.self-directed-learning-checkbox:checkbox').change(function () { if ($(this).is(':checked')) { $('div.advance-start-at-time').show(); diff --git a/client/app/bundles/course/admin/lesson-plan-settings.jsx b/client/app/bundles/course/admin/lesson-plan-settings.jsx index 6cf5f3af03c..ae387528010 100644 --- a/client/app/bundles/course/admin/lesson-plan-settings.jsx +++ b/client/app/bundles/course/admin/lesson-plan-settings.jsx @@ -1,10 +1,9 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import LessonPlanSettings from 'course/admin/pages/LessonPlanSettings'; import storeCreator from './store'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('lesson-plan-settings'); if (mountNode) { diff --git a/client/app/bundles/course/admin/notification-settings.jsx b/client/app/bundles/course/admin/notification-settings.jsx index 59fd532a75a..25331ad6307 100644 --- a/client/app/bundles/course/admin/notification-settings.jsx +++ b/client/app/bundles/course/admin/notification-settings.jsx @@ -1,10 +1,9 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import NotificationSettings from 'course/admin/pages/NotificationSettings'; import storeCreator from './store'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('notification-settings'); if (mountNode) { diff --git a/client/app/bundles/course/admin/pages/LessonPlanSettings/MilestoneGroupSettings.jsx b/client/app/bundles/course/admin/pages/LessonPlanSettings/MilestoneGroupSettings.jsx index 283de1f853b..d3614354f5a 100644 --- a/client/app/bundles/course/admin/pages/LessonPlanSettings/MilestoneGroupSettings.jsx +++ b/client/app/bundles/course/admin/pages/LessonPlanSettings/MilestoneGroupSettings.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -37,7 +37,7 @@ const translations = defineMessages({ }, }); -class MilestoneGroupSettings extends React.Component { +class MilestoneGroupSettings extends Component { handleUpdate = (_, milestonesExpanded) => { const { dispatch } = this.props; const payload = { diff --git a/client/app/bundles/course/admin/pages/LessonPlanSettings/__test__/index.test.jsx b/client/app/bundles/course/admin/pages/LessonPlanSettings/__test__/index.test.jsx index 74bf788d456..bd0865de1d4 100644 --- a/client/app/bundles/course/admin/pages/LessonPlanSettings/__test__/index.test.jsx +++ b/client/app/bundles/course/admin/pages/LessonPlanSettings/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import CourseAPI from 'api/course'; import storeCreator from 'course/admin/store'; @@ -33,7 +32,7 @@ describe('', () => { const toggles = lessonPlanSettings.find('Toggle'); // Enabled? and Visible? toggles. - expect(toggles.length).toBe(2); + expect(toggles).toHaveLength(2); const toggle = toggles.first(); toggle.props().onToggle(null, true); diff --git a/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx b/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx index 2c39039f838..f6df52bb313 100644 --- a/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx +++ b/client/app/bundles/course/admin/pages/LessonPlanSettings/index.jsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -18,7 +18,7 @@ import { updateLessonPlanSettings } from 'course/admin/actions/lesson-plan-items import translations from './translations.intl'; import MilestoneGroupSettings from './MilestoneGroupSettings'; -class LessonPlanSettings extends React.Component { +class LessonPlanSettings extends Component { // Ensure both enabled and visible values are sent in the payload. // Send the current value for visible when changing enabled. handleLessonPlanItemEnabledUpdate = (setting) => { diff --git a/client/app/bundles/course/admin/pages/NotificationSettings/__test__/index.test.jsx b/client/app/bundles/course/admin/pages/NotificationSettings/__test__/index.test.jsx index 1f09db11832..bd5e9efcce2 100644 --- a/client/app/bundles/course/admin/pages/NotificationSettings/__test__/index.test.jsx +++ b/client/app/bundles/course/admin/pages/NotificationSettings/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import CourseAPI from 'api/course'; import storeCreator from 'course/admin/store'; @@ -27,7 +26,7 @@ describe('', () => { ); const toggles = notificationSettings.find('Toggle'); - expect(toggles.length).toBe(2); + expect(toggles).toHaveLength(2); const toggle = toggles.first(); toggle.props().onToggle(null, true); diff --git a/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx b/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx index 67bc6c9083c..79d06d8f9a3 100644 --- a/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx +++ b/client/app/bundles/course/admin/pages/NotificationSettings/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -28,7 +28,7 @@ const styles = { }, }; -class NotificationSettings extends React.Component { +class NotificationSettings extends Component { handleComponentNotificationSettingUpdate = (setting, type) => { const { dispatch } = this.props; const componentTitle = @@ -77,6 +77,45 @@ class NotificationSettings extends React.Component { }; }; + renderEmailSettingsTable() { + const { emailSettings } = this.props; + + if (emailSettings.length < 1) { + return ( + + + + ); + } + + return ( + + + + + + + + + + + + + + + + + + + + + + {emailSettings.map((item) => this.renderRow(item))} + +
+ ); + } + renderRow(setting) { const componentTitle = setting.title ?? @@ -135,45 +174,6 @@ class NotificationSettings extends React.Component { ); } - renderEmailSettingsTable() { - const { emailSettings } = this.props; - - if (emailSettings.length < 1) { - return ( - - - - ); - } - - return ( - - - - - - - - - - - - - - - - - - - - - - {emailSettings.map((item) => this.renderRow(item))} - -
- ); - } - render() { return ( <> diff --git a/client/app/bundles/course/admin/sidebar-settings.js b/client/app/bundles/course/admin/sidebar-settings.js index 70112395014..a505e5964e2 100644 --- a/client/app/bundles/course/admin/sidebar-settings.js +++ b/client/app/bundles/course/admin/sidebar-settings.js @@ -1,6 +1,6 @@ require('jquery-ui/ui/widgets/sortable'); -$(document).ready(() => { +$(() => { $('.weight').hide(); $('.reorder').show(); diff --git a/client/app/bundles/course/assessment/assessments-edit.jsx b/client/app/bundles/course/assessment/assessments-edit.jsx index 58790d1bb54..00d17f8ac6c 100644 --- a/client/app/bundles/course/assessment/assessments-edit.jsx +++ b/client/app/bundles/course/assessment/assessments-edit.jsx @@ -1,11 +1,10 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from './store'; import AssessmentEditPage from './pages/AssessmentEdit'; import { categoryAndTabTitle } from './utils'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('assessment-edit'); if (mountNode) { const dataAttr = mountNode.getAttribute('data'); diff --git a/client/app/bundles/course/assessment/assessments-index.jsx b/client/app/bundles/course/assessment/assessments-index.jsx index 87eaa4d096e..8196e63584a 100644 --- a/client/app/bundles/course/assessment/assessments-index.jsx +++ b/client/app/bundles/course/assessment/assessments-index.jsx @@ -1,10 +1,9 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from './store'; import AssessmentIndexPage from './pages/AssessmentIndex'; -$(document).ready(() => { +$(() => { const mountNode = $('.new-btn')[0]; if (mountNode) { diff --git a/client/app/bundles/course/assessment/assessments-show.js b/client/app/bundles/course/assessment/assessments-show.js index 3c8a57b4f2d..ce532dad31b 100644 --- a/client/app/bundles/course/assessment/assessments-show.js +++ b/client/app/bundles/course/assessment/assessments-show.js @@ -33,7 +33,7 @@ function initializeQuestionSorting() { }); } -$(document).ready(() => { +$(() => { initializeQuestionSorting(); $('[data-toggle="tooltip"]').tooltip(); }); diff --git a/client/app/bundles/course/assessment/containers/AssessmentForm/index.jsx b/client/app/bundles/course/assessment/containers/AssessmentForm/index.jsx index 2c9c2bcf97a..a52d86a0fe9 100644 --- a/client/app/bundles/course/assessment/containers/AssessmentForm/index.jsx +++ b/client/app/bundles/course/assessment/containers/AssessmentForm/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import { reduxForm, Field, Form, formValueSelector, change } from 'redux-form'; @@ -86,7 +86,7 @@ const validate = (values) => { return errors; }; -class AssessmentForm extends React.Component { +class AssessmentForm extends Component { componentDidMount() { const { dispatch, editing } = this.props; // TODO: Shift the fetchTabs only when the selection menu is clicked on. This would @@ -136,62 +136,6 @@ class AssessmentForm extends React.Component { } }; - renderTabs() { - const { tabs, editing, submitting } = this.props; - - return ( - } - floatingLabelFixed - disabled={editing && submitting} - > - {tabs && - tabs.map((tab) => ( - - ))} - - ); - } - - renderPasswordFields() { - const { submitting } = this.props; - - return ( -
- } - fullWidth - autoComplete="off" - disabled={submitting} - /> -
- -
- - } - fullWidth - autoComplete="off" - disabled={submitting} - /> -
- -
-
- ); - } - renderEnableRandomizationField() { const { submitting } = this.props; @@ -270,7 +214,8 @@ class AssessmentForm extends React.Component { primaryText={} /> } /> @@ -301,6 +246,62 @@ class AssessmentForm extends React.Component { ); } + renderPasswordFields() { + const { submitting } = this.props; + + return ( +
+ } + fullWidth + autoComplete="off" + disabled={submitting} + /> +
+ +
+ + } + fullWidth + autoComplete="off" + disabled={submitting} + /> +
+ +
+
+ ); + } + + renderTabs() { + const { tabs, editing, submitting } = this.props; + + return ( + } + floatingLabelFixed + disabled={editing && submitting} + > + {tabs && + tabs.map((tab) => ( + + ))} + + ); + } + render() { const { handleSubmit, diff --git a/client/app/bundles/course/assessment/containers/MaterialUploader/Material.jsx b/client/app/bundles/course/assessment/containers/MaterialUploader/Material.jsx index 666ef071b42..92f140c052a 100644 --- a/client/app/bundles/course/assessment/containers/MaterialUploader/Material.jsx +++ b/client/app/bundles/course/assessment/containers/MaterialUploader/Material.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage, defineMessages } from 'react-intl'; import { formatLongDateTime } from 'lib/moment'; @@ -56,7 +56,7 @@ const propTypes = { disabled: PropTypes.bool, }; -class Material extends React.Component { +class Material extends Component { onDelete = (e) => { e.preventDefault(); const { id, name, onMaterialDelete } = this.props; diff --git a/client/app/bundles/course/assessment/containers/MaterialUploader/MaterialList.jsx b/client/app/bundles/course/assessment/containers/MaterialUploader/MaterialList.jsx index 56340ed28a7..c2e436cbda9 100644 --- a/client/app/bundles/course/assessment/containers/MaterialUploader/MaterialList.jsx +++ b/client/app/bundles/course/assessment/containers/MaterialUploader/MaterialList.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage, defineMessages } from 'react-intl'; import { List } from 'material-ui/List'; diff --git a/client/app/bundles/course/assessment/containers/MaterialUploader/__test__/index.test.js b/client/app/bundles/course/assessment/containers/MaterialUploader/__test__/index.test.js index f55dd3ff280..550130c7da7 100644 --- a/client/app/bundles/course/assessment/containers/MaterialUploader/__test__/index.test.js +++ b/client/app/bundles/course/assessment/containers/MaterialUploader/__test__/index.test.js @@ -1,5 +1,4 @@ import { mount, shallow } from 'enzyme'; -import React from 'react'; import MockAdapter from 'axios-mock-adapter'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import CourseAPI from 'api/course'; diff --git a/client/app/bundles/course/assessment/containers/MaterialUploader/index.jsx b/client/app/bundles/course/assessment/containers/MaterialUploader/index.jsx index b1019fd77e9..2b2e716c7de 100644 --- a/client/app/bundles/course/assessment/containers/MaterialUploader/index.jsx +++ b/client/app/bundles/course/assessment/containers/MaterialUploader/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import CourseAPI from 'api/course'; @@ -12,7 +12,7 @@ const propTypes = { enableMaterialsAction: PropTypes.bool.isRequired, }; -class MaterialUploader extends React.Component { +class MaterialUploader extends Component { constructor(props) { super(props); this.state = { @@ -21,6 +21,32 @@ class MaterialUploader extends React.Component { }; } + onFileInputChange = (e) => { + e.preventDefault(); + const fileInput = e.target; + const { folderId } = this.props; + const files = fileInput.files; + + const materials = []; + for (let i = 0; i < files.length; i += 1) { + materials.push({ name: files[i].name }); + } + this.setState((state) => ({ + uploadingMaterials: state.uploadingMaterials.concat(materials), + })); + + CourseAPI.materialFolders + .upload(folderId, files) + .then((response) => { + this.updateMaterials(materials, response); + }) + .catch((error) => { + this.removeUploads(materials, error.response); + // Set the value to null so that the files can be selected again. + fileInput.value = null; + }); + }; + onMaterialDelete = (id, name) => { this.setState((state) => { // Update UI to show the loader. @@ -69,31 +95,18 @@ class MaterialUploader extends React.Component { }); }; - onFileInputChange = (e) => { - e.preventDefault(); - const fileInput = e.target; - const { folderId } = this.props; - const files = fileInput.files; - - const materials = []; - for (let i = 0; i < files.length; i += 1) { - materials.push({ name: files[i].name }); - } + // Remove given materials from uploading list and display error message. + removeUploads(materials, response) { + const messageFromServer = + response && response.data && response.data.message; + const failureMessage = ; this.setState((state) => ({ - uploadingMaterials: state.uploadingMaterials.concat(materials), + uploadingMaterials: state.uploadingMaterials.filter( + (m) => materials.indexOf(m) === -1, + ), + notification: { message: messageFromServer || failureMessage }, })); - - CourseAPI.materialFolders - .upload(folderId, files) - .then((response) => { - this.updateMaterials(materials, response); - }) - .catch((error) => { - this.removeUploads(materials, error.response); - // Set the value to null so that the files can be selected again. - fileInput.value = null; - }); - }; + } // Remove materials from uploading list and add new materials from server reponse to existing // materials list. @@ -112,19 +125,6 @@ class MaterialUploader extends React.Component { this.setState(newState); } - // Remove given materials from uploading list and display error message. - removeUploads(materials, response) { - const messageFromServer = - response && response.data && response.data.message; - const failureMessage = ; - this.setState((state) => ({ - uploadingMaterials: state.uploadingMaterials.filter( - (m) => materials.indexOf(m) === -1, - ), - notification: { message: messageFromServer || failureMessage }, - })); - } - render() { return ( { // Remove view_password and session_password field if password is disabled const viewPassword = data.password_protected ? data.view_password : null; diff --git a/client/app/bundles/course/assessment/pages/AssessmentIndex/__test__/index.test.js b/client/app/bundles/course/assessment/pages/AssessmentIndex/__test__/index.test.js index 11030c4e28f..3bfb5e1220b 100644 --- a/client/app/bundles/course/assessment/pages/AssessmentIndex/__test__/index.test.js +++ b/client/app/bundles/course/assessment/pages/AssessmentIndex/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from '../../../store'; diff --git a/client/app/bundles/course/assessment/pages/AssessmentIndex/index.jsx b/client/app/bundles/course/assessment/pages/AssessmentIndex/index.jsx index 467fcdef643..eda95defcea 100644 --- a/client/app/bundles/course/assessment/pages/AssessmentIndex/index.jsx +++ b/client/app/bundles/course/assessment/pages/AssessmentIndex/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { submit, isPristine } from 'redux-form'; @@ -27,7 +27,7 @@ const styles = { }, }; -class PopupDialog extends React.Component { +class PopupDialog extends Component { onFormSubmit = (data) => { const { categoryId, tabId, intl } = this.props; @@ -42,10 +42,6 @@ class PopupDialog extends React.Component { ); }; - handleOpen = () => { - this.props.dispatch({ type: actionTypes.ASSESSMENT_FORM_SHOW }); - }; - handleClose = () => { this.props.dispatch({ type: actionTypes.ASSESSMENT_FORM_CANCEL, @@ -53,6 +49,10 @@ class PopupDialog extends React.Component { }); }; + handleOpen = () => { + this.props.dispatch({ type: actionTypes.ASSESSMENT_FORM_SHOW }); + }; + render() { const { intl, dispatch } = this.props; diff --git a/client/app/bundles/course/assessment/question/multiple-responses.js b/client/app/bundles/course/assessment/question/multiple-responses.js index e95bfbe30f8..6cb4b2ce00e 100644 --- a/client/app/bundles/course/assessment/question/multiple-responses.js +++ b/client/app/bundles/course/assessment/question/multiple-responses.js @@ -1,6 +1,6 @@ require('jquery-ui/ui/widgets/sortable'); -$(document).ready(() => { +$(() => { // When items are removed, there might be gaps in the weights. function updateWeights() { $('.weight input').val((index) => index + 1); diff --git a/client/app/bundles/course/assessment/question/programming.jsx b/client/app/bundles/course/assessment/question/programming.jsx index 7686b35f742..0612fbcd742 100644 --- a/client/app/bundles/course/assessment/question/programming.jsx +++ b/client/app/bundles/course/assessment/question/programming.jsx @@ -1,11 +1,10 @@ -import React from 'react'; import { render } from 'react-dom'; import Immutable from 'immutable'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from './programming/store'; import ProgrammingQuestion from './programming/ProgrammingQuestion'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('programming-question'); if (mountNode) { const data = mountNode.getAttribute('data'); diff --git a/client/app/bundles/course/assessment/question/programming/ProgrammingQuestion.jsx b/client/app/bundles/course/assessment/question/programming/ProgrammingQuestion.jsx index c7cf95e43a4..167bf27641d 100644 --- a/client/app/bundles/course/assessment/question/programming/ProgrammingQuestion.jsx +++ b/client/app/bundles/course/assessment/question/programming/ProgrammingQuestion.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; diff --git a/client/app/bundles/course/assessment/question/programming/components/BuildLog.jsx b/client/app/bundles/course/assessment/question/programming/components/BuildLog.jsx index b8f31fa8029..3ce79675bcc 100644 --- a/client/app/bundles/course/assessment/question/programming/components/BuildLog.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/BuildLog.jsx @@ -1,6 +1,5 @@ import Immutable from 'immutable'; -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Cpp/OnlineEditorCppView.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Cpp/OnlineEditorCppView.jsx index 3de33aa74c8..e276da5d160 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Cpp/OnlineEditorCppView.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Cpp/OnlineEditorCppView.jsx @@ -1,6 +1,6 @@ import Immutable from 'immutable'; -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, FormattedMessage, intlShape } from 'react-intl'; import { Card, CardHeader, CardText } from 'material-ui/Card'; @@ -52,7 +52,7 @@ const contextTypes = { muiTheme: PropTypes.object.isRequired, }; -class OnlineEditorCppView extends React.Component { +class OnlineEditorCppView extends Component { testCaseCreateHandler(type) { return (e) => { e.preventDefault(); @@ -63,6 +63,129 @@ class OnlineEditorCppView extends React.Component { }; } + renderAutogradedFields() { + const { intl, data } = this.props; + const testCases = data.get('test_cases'); + const testCaseError = data.getIn(['test_cases', 'error']); + const errorTextElement = testCaseError && ( +
+ {testCaseError} +
+ ); + + return ( + <> +
+ {this.renderEditorCard( + intl.formatMessage(translations.solutionTitle), + intl.formatMessage(translations.solutionSubtitle), + 'solution', + )} + {this.renderEditorCard( + intl.formatMessage(translations.prependTitle), + intl.formatMessage(translations.prependSubtitle), + 'prepend', + )} + {this.renderEditorCard( + intl.formatMessage(translations.appendTitle), + intl.formatMessage(cppTranslations.appendSubtitle), + 'append', + )} +
+

{intl.formatMessage(translations.dataFilesHeader)}

+ {this.renderExistingPackageFiles( + 'data_files', + this.props.intl.formatMessage(translations.currentDataFilesHeader), + )} + {this.renderNewPackageFiles( + 'data_files', + this.props.intl.formatMessage(translations.newDataFilesHeader), + intl.formatMessage(translations.addDataFileButton), + )} +

{intl.formatMessage(translations.testCasesHeader)}

+
+ + {intl.formatMessage(translations.testCaseDescriptionNote)} + + ), + expression: ( + {intl.formatMessage(translations.expressionHeader)} + ), + expected: ( + {intl.formatMessage(translations.expectedHeader)} + ), + expect_star: EXPECT_*, + googletest: ( + + {intl.formatMessage( + translations.testCaseDescriptionGoogleTest, + )} + + ), + tostring: ( + + + std::to_string + + + ), + }} + /> +
+ {errorTextElement} + {this.renderTestCases( + intl.formatMessage(translations.publicTestCases), + testCases, + 'public', + )} + {this.renderTestCases( + intl.formatMessage(translations.privateTestCases), + testCases, + 'private', + )} + {this.renderTestCases( + intl.formatMessage(translations.evaluationTestCases), + testCases, + 'evaluation', + )} + + ); + } + + renderEditorCard(header, subtitle, field) { + const value = this.props.data.get(field) || ''; + return ( + + ); + } + renderExistingPackageFiles(fileType, header) { const numFiles = this.props.data.get(fileType).size; if (numFiles === 0) { @@ -240,129 +363,6 @@ class OnlineEditorCppView extends React.Component { ); } - renderEditorCard(header, subtitle, field) { - const value = this.props.data.get(field) || ''; - return ( - - ); - } - - renderAutogradedFields() { - const { intl, data } = this.props; - const testCases = data.get('test_cases'); - const testCaseError = data.getIn(['test_cases', 'error']); - const errorTextElement = testCaseError && ( -
- {testCaseError} -
- ); - - return ( - <> -
- {this.renderEditorCard( - intl.formatMessage(translations.solutionTitle), - intl.formatMessage(translations.solutionSubtitle), - 'solution', - )} - {this.renderEditorCard( - intl.formatMessage(translations.prependTitle), - intl.formatMessage(translations.prependSubtitle), - 'prepend', - )} - {this.renderEditorCard( - intl.formatMessage(translations.appendTitle), - intl.formatMessage(cppTranslations.appendSubtitle), - 'append', - )} -
-

{intl.formatMessage(translations.dataFilesHeader)}

- {this.renderExistingPackageFiles( - 'data_files', - this.props.intl.formatMessage(translations.currentDataFilesHeader), - )} - {this.renderNewPackageFiles( - 'data_files', - this.props.intl.formatMessage(translations.newDataFilesHeader), - intl.formatMessage(translations.addDataFileButton), - )} -

{intl.formatMessage(translations.testCasesHeader)}

-
- - {intl.formatMessage(translations.testCaseDescriptionNote)} - - ), - expression: ( - {intl.formatMessage(translations.expressionHeader)} - ), - expected: ( - {intl.formatMessage(translations.expectedHeader)} - ), - expect_star: EXPECT_*, - googletest: ( - - {intl.formatMessage( - translations.testCaseDescriptionGoogleTest, - )} - - ), - tostring: ( - - - std::to_string - - - ), - }} - /> -
- {errorTextElement} - {this.renderTestCases( - intl.formatMessage(translations.publicTestCases), - testCases, - 'public', - )} - {this.renderTestCases( - intl.formatMessage(translations.privateTestCases), - testCases, - 'private', - )} - {this.renderTestCases( - intl.formatMessage(translations.evaluationTestCases), - testCases, - 'evaluation', - )} - - ); - } - render() { const { intl, autograded } = this.props; diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/EditorCard.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/EditorCard.jsx index b44b891ac89..291b856d6de 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/EditorCard.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/EditorCard.jsx @@ -1,10 +1,10 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl } from 'react-intl'; import { Card, CardHeader, CardText } from 'material-ui/Card'; import AceEditor from 'react-ace'; -class EditorCard extends React.Component { +class EditorCard extends Component { static getInputName(field) { return `question_programming[${field}]`; } diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/ExistingPackageFile.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/ExistingPackageFile.jsx index 42b8b1844d3..453de85817d 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/ExistingPackageFile.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/ExistingPackageFile.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl } from 'react-intl'; import { TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Java/OnlineEditorJavaView.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Java/OnlineEditorJavaView.jsx index 6288198bb9f..9c245ad805d 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Java/OnlineEditorJavaView.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Java/OnlineEditorJavaView.jsx @@ -1,6 +1,6 @@ import Immutable from 'immutable'; -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import AceEditor from 'react-ace'; import { injectIntl, FormattedMessage, intlShape } from 'react-intl'; @@ -56,7 +56,7 @@ const contextTypes = { muiTheme: PropTypes.object.isRequired, }; -class OnlineEditorJavaView extends React.Component { +class OnlineEditorJavaView extends Component { static getTestInputName(type, field) { return `question_programming[test_cases][${type}][][${field}]`; } @@ -71,6 +71,203 @@ class OnlineEditorJavaView extends React.Component { }; } + renderAutogradedFields() { + const { intl, data } = this.props; + const submitAsFile = this.props.data.get('submit_as_file'); + const testCases = data.get('test_cases'); + const testCaseError = data.getIn(['test_cases', 'error']); + const errorTextElement = testCaseError && ( +
+ {testCaseError} +
+ ); + + return ( + <> +
+ {submitAsFile ? ( +
+

+ {this.props.intl.formatMessage( + javaTranslations.solutionFilesHeader, + )} +

+ {this.renderExistingPackageFiles( + 'solution_files', + this.props.intl.formatMessage( + javaTranslations.currentSolutionFilesHeader, + ), + )} + {this.renderNewPackageFiles( + 'solution_files', + this.props.intl.formatMessage( + javaTranslations.newSolutionFilesHeader, + ), + intl.formatMessage(javaTranslations.addSolutionFileButton), + )} +
+ ) : ( + this.renderEditorCard( + intl.formatMessage(translations.solutionTitle), + intl.formatMessage(translations.solutionSubtitle), + 'solution', + ) + )} + {this.renderEditorCard( + intl.formatMessage(translations.prependTitle), + intl.formatMessage(javaTranslations.prependSubtitle), + 'prepend', + )} + {this.renderEditorCard( + intl.formatMessage(translations.appendTitle), + intl.formatMessage(javaTranslations.appendSubtitle), + 'append', + )} +
+

{intl.formatMessage(translations.dataFilesHeader)}

+ {this.renderExistingPackageFiles( + 'data_files', + this.props.intl.formatMessage(translations.currentDataFilesHeader), + )} + {this.renderNewPackageFiles( + 'data_files', + this.props.intl.formatMessage(translations.newDataFilesHeader), + intl.formatMessage(translations.addDataFileButton), + )} +

{intl.formatMessage(translations.testCasesHeader)}

+
+ + {intl.formatMessage(translations.testCaseDescriptionNote)} + + ), + expression: ( + {intl.formatMessage(translations.expressionHeader)} + ), + expected: ( + {intl.formatMessage(translations.expectedHeader)} + ), + expectEquals: ( + {intl.formatMessage(javaTranslations.expectEquals)} + ), + }} + /> +
+
+ {intl.formatMessage(translations.expressionHeader)} + ), + expected: ( + {intl.formatMessage(translations.expectedHeader)} + ), + code: ( + + {intl.formatMessage(javaTranslations.testCaseDescriptionCode)} + + ), + editor: ( + + {intl.formatMessage( + javaTranslations.testCaseDescriptionEditor, + )} + + ), + /* eslint-disable react/jsx-indent */ + codeExample: ( +
+                  

+ {'int array [] = {0,0,0}; // Initialize variables'} +

+

+ addOneToArray(array); // Make function calls +

+

+ int expected [] ={'{'} + 1,1,1 + {'}'}; // Make function calls +

+

+ setAttribute("expression", + "addOneToArray([0,0,0])"); + {' // Override the default expression displayed'} +

+
+ ), + /* eslint-enable react/jsx-indent */ + codeExampleExpected: expected, + codeExampleExpression: array, + }} + /> +
+ {errorTextElement} + {this.renderTestCases( + intl.formatMessage(translations.publicTestCases), + testCases, + 'public', + )} + {this.renderTestCases( + intl.formatMessage(translations.privateTestCases), + testCases, + 'private', + )} + {this.renderTestCases( + intl.formatMessage(translations.evaluationTestCases), + testCases, + 'evaluation', + )} + + ); + } + + renderEditorCard(header, subtitle, field) { + const value = this.props.data.get(field) || ''; + return ( + + ); + } + renderExistingPackageFiles(fileType, header) { const numFiles = this.props.data.get(fileType).size; if (numFiles === 0) { @@ -297,202 +494,6 @@ class OnlineEditorJavaView extends React.Component { ); } - renderEditorCard(header, subtitle, field) { - const value = this.props.data.get(field) || ''; - return ( - - ); - } - - renderAutogradedFields() { - const { intl, data } = this.props; - const submitAsFile = this.props.data.get('submit_as_file'); - const testCases = data.get('test_cases'); - const testCaseError = data.getIn(['test_cases', 'error']); - const errorTextElement = testCaseError && ( -
- {testCaseError} -
- ); - - return ( - <> -
- {submitAsFile ? ( -
-

- {this.props.intl.formatMessage( - javaTranslations.solutionFilesHeader, - )} -

- {this.renderExistingPackageFiles( - 'solution_files', - this.props.intl.formatMessage( - javaTranslations.currentSolutionFilesHeader, - ), - )} - {this.renderNewPackageFiles( - 'solution_files', - this.props.intl.formatMessage( - javaTranslations.newSolutionFilesHeader, - ), - intl.formatMessage(javaTranslations.addSolutionFileButton), - )} -
- ) : ( - this.renderEditorCard( - intl.formatMessage(translations.solutionTitle), - intl.formatMessage(translations.solutionSubtitle), - 'solution', - ) - )} - {this.renderEditorCard( - intl.formatMessage(translations.prependTitle), - intl.formatMessage(javaTranslations.prependSubtitle), - 'prepend', - )} - {this.renderEditorCard( - intl.formatMessage(translations.appendTitle), - intl.formatMessage(javaTranslations.appendSubtitle), - 'append', - )} -
-

{intl.formatMessage(translations.dataFilesHeader)}

- {this.renderExistingPackageFiles( - 'data_files', - this.props.intl.formatMessage(translations.currentDataFilesHeader), - )} - {this.renderNewPackageFiles( - 'data_files', - this.props.intl.formatMessage(translations.newDataFilesHeader), - intl.formatMessage(translations.addDataFileButton), - )} -

{intl.formatMessage(translations.testCasesHeader)}

-
- - {intl.formatMessage(translations.testCaseDescriptionNote)} - - ), - expression: ( - {intl.formatMessage(translations.expressionHeader)} - ), - expected: ( - {intl.formatMessage(translations.expectedHeader)} - ), - expectEquals: ( - {intl.formatMessage(javaTranslations.expectEquals)} - ), - }} - /> -
-
- {intl.formatMessage(translations.expressionHeader)} - ), - expected: ( - {intl.formatMessage(translations.expectedHeader)} - ), - code: ( - - {intl.formatMessage(javaTranslations.testCaseDescriptionCode)} - - ), - editor: ( - - {intl.formatMessage( - javaTranslations.testCaseDescriptionEditor, - )} - - ), - /* eslint-disable react/jsx-indent */ - codeExample: ( -
-                  

- {'int array [] = {0,0,0}; // Initialize variables'} -

-

- addOneToArray(array); // Make function calls -

-

- int expected [] ={'{'} - 1,1,1 - {'}'}; // Make function calls -

-

- {'setAttribute("expression", "addOneToArray([0,0,0])");'} - {' // Override the default expression displayed'} -

-
- ), - /* eslint-enable react/jsx-indent */ - codeExampleExpected: expected, - codeExampleExpression: array, - }} - /> -
- {errorTextElement} - {this.renderTestCases( - intl.formatMessage(translations.publicTestCases), - testCases, - 'public', - )} - {this.renderTestCases( - intl.formatMessage(translations.privateTestCases), - testCases, - 'private', - )} - {this.renderTestCases( - intl.formatMessage(translations.evaluationTestCases), - testCases, - 'evaluation', - )} - - ); - } - render() { const { intl, autograded, isLoading, hasSubmissions } = this.props; const submitAsFile = this.props.data.get('submit_as_file'); diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/NewPackageFile.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/NewPackageFile.jsx index b8252f15a9d..dae90fc57e9 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/NewPackageFile.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/NewPackageFile.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; import RaisedButton from 'material-ui/RaisedButton'; @@ -6,7 +6,7 @@ import { injectIntl } from 'react-intl'; import { grey300 } from 'material-ui/styles/colors'; import styles from './OnlineEditorView.scss'; -class NewPackageFile extends React.Component { +class NewPackageFile extends Component { static getPackageFileName(fileType) { return `question_programming[${fileType}][]`; } diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Python/OnlineEditorPythonView.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Python/OnlineEditorPythonView.jsx index 0ef7aba72c3..3259e0e0d03 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Python/OnlineEditorPythonView.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/Python/OnlineEditorPythonView.jsx @@ -1,6 +1,6 @@ import Immutable from 'immutable'; -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, FormattedMessage, intlShape } from 'react-intl'; import { Card, CardHeader, CardText } from 'material-ui/Card'; @@ -51,7 +51,7 @@ const contextTypes = { muiTheme: PropTypes.object.isRequired, }; -class OnlineEditorPythonView extends React.Component { +class OnlineEditorPythonView extends Component { testCaseCreateHandler(type) { return (e) => { e.preventDefault(); @@ -62,6 +62,125 @@ class OnlineEditorPythonView extends React.Component { }; } + renderAutogradedFields() { + const { intl, data } = this.props; + const testCases = data.get('test_cases'); + const testCaseError = data.getIn(['test_cases', 'error']); + const errorTextElement = testCaseError && ( +
+ {testCaseError} +
+ ); + + return ( + <> +
+ {this.renderEditorCard( + intl.formatMessage(translations.solutionTitle), + intl.formatMessage(translations.solutionSubtitle), + 'solution', + )} + {this.renderEditorCard( + intl.formatMessage(translations.prependTitle), + intl.formatMessage(translations.prependSubtitle), + 'prepend', + )} + {this.renderEditorCard( + intl.formatMessage(translations.appendTitle), + intl.formatMessage(translations.appendSubtitle), + 'append', + )} +
+

{intl.formatMessage(translations.dataFilesHeader)}

+ {this.renderExistingPackageFiles( + 'data_files', + this.props.intl.formatMessage(translations.currentDataFilesHeader), + )} + {this.renderNewPackageFiles( + 'data_files', + this.props.intl.formatMessage(translations.newDataFilesHeader), + intl.formatMessage(translations.addDataFileButton), + )} +

{intl.formatMessage(translations.testCasesHeader)}

+
+ + {intl.formatMessage(translations.testCaseDescriptionNote)} + + ), + expression: ( + {intl.formatMessage(translations.expressionHeader)} + ), + expected: ( + {intl.formatMessage(translations.expectedHeader)} + ), + print: ( + + {intl.formatMessage(translations.testCaseDescriptionPrint)} + + ), + none: ( + + {intl.formatMessage(translations.testCaseDescriptionNone)} + + ), + }} + /> +
+ {errorTextElement} + {this.renderTestCases( + intl.formatMessage(translations.publicTestCases), + testCases, + 'public', + )} + {this.renderTestCases( + intl.formatMessage(translations.privateTestCases), + testCases, + 'private', + )} + {this.renderTestCases( + intl.formatMessage(translations.evaluationTestCases), + testCases, + 'evaluation', + )} + + ); + } + + renderEditorCard(header, subtitle, field) { + const value = this.props.data.get(field) || ''; + return ( + + ); + } + renderExistingPackageFiles(fileType, header) { const numFiles = this.props.data.get(fileType).size; if (numFiles === 0) { @@ -239,125 +358,6 @@ class OnlineEditorPythonView extends React.Component { ); } - renderEditorCard(header, subtitle, field) { - const value = this.props.data.get(field) || ''; - return ( - - ); - } - - renderAutogradedFields() { - const { intl, data } = this.props; - const testCases = data.get('test_cases'); - const testCaseError = data.getIn(['test_cases', 'error']); - const errorTextElement = testCaseError && ( -
- {testCaseError} -
- ); - - return ( - <> -
- {this.renderEditorCard( - intl.formatMessage(translations.solutionTitle), - intl.formatMessage(translations.solutionSubtitle), - 'solution', - )} - {this.renderEditorCard( - intl.formatMessage(translations.prependTitle), - intl.formatMessage(translations.prependSubtitle), - 'prepend', - )} - {this.renderEditorCard( - intl.formatMessage(translations.appendTitle), - intl.formatMessage(translations.appendSubtitle), - 'append', - )} -
-

{intl.formatMessage(translations.dataFilesHeader)}

- {this.renderExistingPackageFiles( - 'data_files', - this.props.intl.formatMessage(translations.currentDataFilesHeader), - )} - {this.renderNewPackageFiles( - 'data_files', - this.props.intl.formatMessage(translations.newDataFilesHeader), - intl.formatMessage(translations.addDataFileButton), - )} -

{intl.formatMessage(translations.testCasesHeader)}

-
- - {intl.formatMessage(translations.testCaseDescriptionNote)} - - ), - expression: ( - {intl.formatMessage(translations.expressionHeader)} - ), - expected: ( - {intl.formatMessage(translations.expectedHeader)} - ), - print: ( - - {intl.formatMessage(translations.testCaseDescriptionPrint)} - - ), - none: ( - - {intl.formatMessage(translations.testCaseDescriptionNone)} - - ), - }} - /> -
- {errorTextElement} - {this.renderTestCases( - intl.formatMessage(translations.publicTestCases), - testCases, - 'public', - )} - {this.renderTestCases( - intl.formatMessage(translations.privateTestCases), - testCases, - 'private', - )} - {this.renderTestCases( - intl.formatMessage(translations.evaluationTestCases), - testCases, - 'evaluation', - )} - - ); - } - render() { const { intl, autograded } = this.props; diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/TestCase.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/TestCase.jsx index 52519541033..eae12e24d36 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/TestCase.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/TestCase.jsx @@ -1,5 +1,5 @@ import Immutable from 'immutable'; -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import { TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; @@ -9,48 +9,30 @@ import { grey300 } from 'material-ui/styles/colors'; import styles from './OnlineEditorView.scss'; import translations from './OnlineEditorView.intl'; -class TestCase extends React.Component { +class TestCase extends Component { static getTestInputName(type, field) { return `question_programming[test_cases][${type}][][${field}]`; } - testCaseDeleteHandler(type, index) { + inlineCodeEditorHandler(type, index, newValue) { return (e) => { e.preventDefault(); - if (!this.props.isLoading) { - this.props.deleteTestCase(this.props.type, index); + this.props.updateTestCase(type, index, 'show_code_editor', newValue); } }; } - inlineCodeEditorHandler(type, index, newValue) { + testCaseDeleteHandler(type, index) { return (e) => { e.preventDefault(); + if (!this.props.isLoading) { - this.props.updateTestCase(type, index, 'show_code_editor', newValue); + this.props.deleteTestCase(this.props.type, index); } }; } - renderInput(test, field, placeholder, index) { - return ( - { - this.props.updateTestCase(this.props.type, index, field, newValue); - }} - hintText={placeholder} - errorText={test.getIn(['error', field])} - disabled={this.props.isLoading} - value={test.get(field)} - fullWidth - multiLine - /> - ); - } - renderCodeEditorButton(type, index, showCodeEditor) { return ( @@ -85,6 +67,24 @@ class TestCase extends React.Component { ); } + renderInput(test, field, placeholder, index) { + return ( + { + this.props.updateTestCase(this.props.type, index, field, newValue); + }} + hintText={placeholder} + errorText={test.getIn(['error', field])} + disabled={this.props.isLoading} + value={test.get(field)} + fullWidth + multiLine + /> + ); + } + render() { const displayedIndex = `0${this.props.index + 1}`.slice(-2); const { diff --git a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/index.jsx b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/index.jsx index cec719cdd5b..0b22b993ae0 100644 --- a/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/index.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/OnlineEditor/index.jsx @@ -1,6 +1,5 @@ import Immutable from 'immutable'; -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; import OnlineEditorPythonView from './Python/OnlineEditorPythonView'; diff --git a/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTemplateView.jsx b/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTemplateView.jsx index e1c4b594e1a..2723c8bdac8 100644 --- a/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTemplateView.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTemplateView.jsx @@ -1,6 +1,5 @@ import Immutable from 'immutable'; -import React from 'react'; import PropTypes from 'prop-types'; import { Card } from 'material-ui/Card'; import { Tabs, Tab } from 'material-ui/Tabs'; diff --git a/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTestCaseView.jsx b/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTestCaseView.jsx index 7c3c69a0bcb..c3b482847c4 100644 --- a/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTestCaseView.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/UploadedPackageTestCaseView.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; import { Card, CardHeader } from 'material-ui/Card'; @@ -62,7 +62,7 @@ const translations = defineMessages({ }, }); -class UploadedPackageTestCaseView extends React.Component { +class UploadedPackageTestCaseView extends Component { renderTable(tests) { if (tests.size > 0) { const rows = tests.map((test) => ( diff --git a/client/app/bundles/course/assessment/question/programming/components/UploadedPackageView.jsx b/client/app/bundles/course/assessment/question/programming/components/UploadedPackageView.jsx index 5d6589120cf..2a4174169d9 100644 --- a/client/app/bundles/course/assessment/question/programming/components/UploadedPackageView.jsx +++ b/client/app/bundles/course/assessment/question/programming/components/UploadedPackageView.jsx @@ -1,6 +1,5 @@ import Immutable from 'immutable'; -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; import UploadedPackageTemplateView from './UploadedPackageTemplateView'; diff --git a/client/app/bundles/course/assessment/question/programming/containers/ProgrammingQuestionForm/ProgrammingQuestionForm.jsx b/client/app/bundles/course/assessment/question/programming/containers/ProgrammingQuestionForm/ProgrammingQuestionForm.jsx index 7a44cfe1cc2..2078b99599d 100644 --- a/client/app/bundles/course/assessment/question/programming/containers/ProgrammingQuestionForm/ProgrammingQuestionForm.jsx +++ b/client/app/bundles/course/assessment/question/programming/containers/ProgrammingQuestionForm/ProgrammingQuestionForm.jsx @@ -1,7 +1,7 @@ /* eslint-disable react/no-array-index-key */ import Immutable from 'immutable'; -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import SelectField from 'material-ui/SelectField'; @@ -109,17 +109,17 @@ function validation(data, pathOfKeysToData, intl) { return errors; } -class ProgrammingQuestionForm extends React.Component { - static getInputName(field) { - return `question_programming[${field}]`; +class ProgrammingQuestionForm extends Component { + static convertNull(value) { + return value === null ? '' : value; } static getInputId(field) { return `question_programming_${field}`; } - static convertNull(value) { - return value === null ? '' : value; + static getInputName(field) { + return `question_programming[${field}]`; } constructor(props) { @@ -133,7 +133,7 @@ class ProgrammingQuestionForm extends React.Component { ); } - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { this.summernoteEditors.attr( 'contenteditable', !nextProps.data.get('is_loading'), @@ -227,28 +227,6 @@ class ProgrammingQuestionForm extends React.Component { this.props.actions.submitForm(url, method, formData, failureMessage); }; - validationCheck() { - const { data, intl } = this.props; - const question = data.get('question'); - let errors = validation(question, ['question'], intl); - - // Check online editor - if (question.get('edit_online')) { - errors = errors.concat( - editorValidation(this.props.data, ['test_ui'], intl), - ); - } - - this.props.actions.setValidationErrors(errors); - - return errors.length === 0; - } - - summernoteHandler(field) { - return (e) => - this.props.actions.updateProgrammingQuestion(field, e === '' ? null : e); - } - languageHandler(field) { return (id) => { let mode = null; @@ -278,6 +256,86 @@ class ProgrammingQuestionForm extends React.Component { return this.props.intl.formatMessage(translations.submitButton); } + summernoteHandler(field) { + return (e) => + this.props.actions.updateProgrammingQuestion(field, e === '' ? null : e); + } + + validationCheck() { + const { data, intl } = this.props; + const question = data.get('question'); + let errors = validation(question, ['question'], intl); + + // Check online editor + if (question.get('edit_online')) { + errors = errors.concat( + editorValidation(this.props.data, ['test_ui'], intl), + ); + } + + this.props.actions.setValidationErrors(errors); + + return errors.length === 0; + } + + renderBuildLogView() { + const data = this.props.data.getIn(['import_result', 'build_log']); + + if (data) { + return ; + } + + return null; + } + + renderDropdownSelectField( + label, + field, + required, + value, + options, + error, + onChange, + ) { + const selectOptions = options.map((opt) => ( + + )); + const selectFieldOptions = options.map((opt) => ( + + )); + + return ( +
+ { + onChange(id); + }} + disabled={this.props.data.get('is_loading')} + errorText={error} + fullWidth + > + {selectFieldOptions} + + +
+ ); + } + renderImportAlertView() { const alertData = this.props.data.get('import_result').get('alert'); @@ -320,21 +378,6 @@ class ProgrammingQuestionForm extends React.Component { ); } - renderSummernoteField(label, field, required, value) { - return ( - - ); - } - renderMultiSelectSkillsField(label, field, value, options, error) { return (
@@ -377,88 +420,6 @@ class ProgrammingQuestionForm extends React.Component { ); } - renderDropdownSelectField( - label, - field, - required, - value, - options, - error, - onChange, - ) { - const selectOptions = options.map((opt) => ( - - )); - const selectFieldOptions = options.map((opt) => ( - - )); - - return ( -
- { - onChange(id); - }} - disabled={this.props.data.get('is_loading')} - errorText={error} - fullWidth - > - {selectFieldOptions} - - -
- ); - } - - renderSwitcher(showEditOnline, canSwitch) { - if (!canSwitch) { - return null; - } - - const onTestTypeChange = (editOnline) => { - if (this.props.data.get('is_loading')) return; - this.props.actions.updateProgrammingQuestion('edit_online', editOnline); - }; - - return ( - - - - - ); - } - renderPackageField(label, field, pkg, newFilename, showEditOnline) { let downloadNode = null; @@ -534,6 +495,55 @@ class ProgrammingQuestionForm extends React.Component { ); } + renderSummernoteField(label, field, required, value) { + return ( + + ); + } + + renderSwitcher(showEditOnline, canSwitch) { + if (!canSwitch) { + return null; + } + + const onTestTypeChange = (editOnline) => { + if (this.props.data.get('is_loading')) return; + this.props.actions.updateProgrammingQuestion('edit_online', editOnline); + }; + + return ( + + + + + ); + } + renderTestView(showEditOnline) { if (showEditOnline) { return ( @@ -559,16 +569,6 @@ class ProgrammingQuestionForm extends React.Component { return ; } - renderBuildLogView() { - const data = this.props.data.getIn(['import_result', 'build_log']); - - if (data) { - return ; - } - - return null; - } - render() { const question = this.props.data.get('question'); const formData = this.props.data.get('form_data'); diff --git a/client/app/bundles/course/assessment/question/scribing.jsx b/client/app/bundles/course/assessment/question/scribing.jsx index 9a53d83d991..26cea49eaaa 100644 --- a/client/app/bundles/course/assessment/question/scribing.jsx +++ b/client/app/bundles/course/assessment/question/scribing.jsx @@ -1,10 +1,9 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from './scribing/store'; import ScribingQuestion from './scribing/ScribingQuestion'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('scribing-question'); if (mountNode) { diff --git a/client/app/bundles/course/assessment/question/scribing/ScribingQuestion.jsx b/client/app/bundles/course/assessment/question/scribing/ScribingQuestion.jsx index 20fb8427ea7..1005539259e 100644 --- a/client/app/bundles/course/assessment/question/scribing/ScribingQuestion.jsx +++ b/client/app/bundles/course/assessment/question/scribing/ScribingQuestion.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; diff --git a/client/app/bundles/course/assessment/question/scribing/__test__/index.test.js b/client/app/bundles/course/assessment/question/scribing/__test__/index.test.js index 5efcfd2bc45..04210c7245f 100644 --- a/client/app/bundles/course/assessment/question/scribing/__test__/index.test.js +++ b/client/app/bundles/course/assessment/question/scribing/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import { mount } from 'enzyme'; import MockAdapter from 'axios-mock-adapter'; @@ -90,13 +89,13 @@ describe('Scribing question', () => { await sleep(1); expect(spyFetchSkills).toHaveBeenCalled(); newPage.update(); - expect(newPage.find('InputField').length).toBe(2); - expect(newPage.find('MultiSelectSkillsField').length).toBe(1); - expect(newPage.find('SummernoteField').length).toBe(2); - expect(newPage.find('FileUploadField').length).toBe(1); + expect(newPage.find('InputField')).toHaveLength(2); + expect(newPage.find('MultiSelectSkillsField')).toHaveLength(1); + expect(newPage.find('SummernoteField')).toHaveLength(2); + expect(newPage.find('FileUploadField')).toHaveLength(1); expect( - newPage.find('[htmlFor="question_scribing_attachment"]').length, - ).toBe(0); + newPage.find('[htmlFor="question_scribing_attachment"]'), + ).toHaveLength(0); }); it('renders edit question form', async () => { @@ -157,13 +156,13 @@ describe('Scribing question', () => { await sleep(1); expect(spyFetch).toHaveBeenCalled(); fetchPage.update(); - expect(fetchPage.find('InputField').length).toBe(2); - expect(fetchPage.find('MultiSelectSkillsField').length).toBe(1); - expect(fetchPage.find('SummernoteField').length).toBe(2); - expect(fetchPage.find('FileUploadField').length).toBe(0); + expect(fetchPage.find('InputField')).toHaveLength(2); + expect(fetchPage.find('MultiSelectSkillsField')).toHaveLength(1); + expect(fetchPage.find('SummernoteField')).toHaveLength(2); + expect(fetchPage.find('FileUploadField')).toHaveLength(0); expect( - fetchPage.find('[htmlFor="question_scribing_attachment"]').length, - ).toBe(1); + fetchPage.find('[htmlFor="question_scribing_attachment"]'), + ).toHaveLength(1); }); it('renders error message when submit fails from server', async () => { @@ -201,7 +200,7 @@ describe('Scribing question', () => { await sleep(1); expect(spyUpdate).toHaveBeenCalled(); fetchPage.update(); - expect(fetchPage.find('div.alert').length).toBe(1); + expect(fetchPage.find('div.alert')).toHaveLength(1); }); it('allows question to be created', async () => { diff --git a/client/app/bundles/course/assessment/question/scribing/actions/__test__/responses.test.js b/client/app/bundles/course/assessment/question/scribing/actions/__test__/responses.test.js index eb24d47f684..7ad7a8ceda9 100644 --- a/client/app/bundles/course/assessment/question/scribing/actions/__test__/responses.test.js +++ b/client/app/bundles/course/assessment/question/scribing/actions/__test__/responses.test.js @@ -14,7 +14,7 @@ const mock = new MockAdapter(client); beforeEach(() => { mock.reset(); - history.push = jest.fn(); + jest.spyOn(history, 'push').mockImplementation(); }); const assessmentId = '2'; diff --git a/client/app/bundles/course/assessment/question/scribing/components/FileUploadField.jsx b/client/app/bundles/course/assessment/question/scribing/components/FileUploadField.jsx index 57c109775b4..6cf4ffefb63 100644 --- a/client/app/bundles/course/assessment/question/scribing/components/FileUploadField.jsx +++ b/client/app/bundles/course/assessment/question/scribing/components/FileUploadField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; @@ -12,23 +11,21 @@ import { questionNamePrefix, questionIdPrefix } from '../constants'; const mapProps = (props) => ({ ...mapError(props) }); -class FileUploadField extends React.Component { - render() { - const { field, label, isLoading, validate } = this.props; - return ( - - ); - } -} +const FileUploadField = (props) => { + const { field, label, isLoading, validate } = props; + return ( + + ); +}; FileUploadField.propTypes = { field: PropTypes.string.isRequired, diff --git a/client/app/bundles/course/assessment/question/scribing/components/InputField.jsx b/client/app/bundles/course/assessment/question/scribing/components/InputField.jsx index c8cfa81c985..5f9a8e28df3 100644 --- a/client/app/bundles/course/assessment/question/scribing/components/InputField.jsx +++ b/client/app/bundles/course/assessment/question/scribing/components/InputField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; import TextField from 'lib/components/redux-form/TextField'; diff --git a/client/app/bundles/course/assessment/question/scribing/components/MultiSelectSkillsField.jsx b/client/app/bundles/course/assessment/question/scribing/components/MultiSelectSkillsField.jsx index e307a2d3904..311f159a7f5 100644 --- a/client/app/bundles/course/assessment/question/scribing/components/MultiSelectSkillsField.jsx +++ b/client/app/bundles/course/assessment/question/scribing/components/MultiSelectSkillsField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; import MultiSelect from 'lib/components/redux-form/MultiSelect'; diff --git a/client/app/bundles/course/assessment/question/scribing/components/SummernoteField.jsx b/client/app/bundles/course/assessment/question/scribing/components/SummernoteField.jsx index 2b69a9234df..77c1b79c136 100644 --- a/client/app/bundles/course/assessment/question/scribing/components/SummernoteField.jsx +++ b/client/app/bundles/course/assessment/question/scribing/components/SummernoteField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; import MaterialSummernote from 'lib/components/redux-form/RichTextField'; diff --git a/client/app/bundles/course/assessment/question/scribing/containers/ScribingQuestionForm/index.jsx b/client/app/bundles/course/assessment/question/scribing/containers/ScribingQuestionForm/index.jsx index dfc2aadff31..06c177bff35 100644 --- a/client/app/bundles/course/assessment/question/scribing/containers/ScribingQuestionForm/index.jsx +++ b/client/app/bundles/course/assessment/question/scribing/containers/ScribingQuestionForm/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import { reduxForm, Form } from 'redux-form'; @@ -53,7 +53,7 @@ const validations = { value && value < 0 ? translations.positiveNumberValidationError : undefined, }; -class ScribingQuestionForm extends React.Component { +class ScribingQuestionForm extends Component { static convertNull(value) { return value === null ? '' : value; } @@ -72,7 +72,7 @@ class ScribingQuestionForm extends React.Component { ); } - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { this.summernoteEditors.attr('contenteditable', !nextProps.data.isLoading); } diff --git a/client/app/bundles/course/assessment/question/text-responses.js b/client/app/bundles/course/assessment/question/text-responses.js index d1b19644ab2..a0a2f94b7e5 100644 --- a/client/app/bundles/course/assessment/question/text-responses.js +++ b/client/app/bundles/course/assessment/question/text-responses.js @@ -4,7 +4,7 @@ // TextResponseComprehensionSolution model, // for the purpose of MVP testing and will be replaced with a // more intuitive input method (e.g. the tokens for Skills) soon. -$(document).ready(() => { +$(() => { function replaceBracketFromComprehensionAttributes() { if (document.getElementsByClassName('table-comprehension').length == 0) return; // do nothing if not comprehension question diff --git a/client/app/bundles/course/assessment/submission/actions/annotations.js b/client/app/bundles/course/assessment/submission/actions/annotations.js index e319f7072a1..30953b3cdfb 100644 --- a/client/app/bundles/course/assessment/submission/actions/annotations.js +++ b/client/app/bundles/course/assessment/submission/actions/annotations.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-unresolved, import/extensions, import/no-extraneous-dependencies import CourseAPI from 'api/course'; import actionTypes from '../constants'; diff --git a/client/app/bundles/course/assessment/submission/actions/comments.js b/client/app/bundles/course/assessment/submission/actions/comments.js index 50c8ad83594..c76ae8c1d49 100644 --- a/client/app/bundles/course/assessment/submission/actions/comments.js +++ b/client/app/bundles/course/assessment/submission/actions/comments.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-unresolved, import/extensions, import/no-extraneous-dependencies import CourseAPI from 'api/course'; import actionTypes from '../constants'; diff --git a/client/app/bundles/course/assessment/submission/components/Answers.jsx b/client/app/bundles/course/assessment/submission/components/Answers.jsx index 5022eb77be1..3acf20e9038 100644 --- a/client/app/bundles/course/assessment/submission/components/Answers.jsx +++ b/client/app/bundles/course/assessment/submission/components/Answers.jsx @@ -1,7 +1,7 @@ import 'ace-builds/src-noconflict/mode-python'; import 'ace-builds/src-noconflict/theme-github'; -import React, { Component } from 'react'; +import { Component } from 'react'; import ScribingView from '../containers/ScribingView'; import VoiceResponseAnswer from '../containers/VoiceResponseAnswer'; import MultipleChoiceAnswer from './answers/MultipleChoice'; @@ -12,6 +12,20 @@ import ProgrammingAnswer from './answers/Programming'; import ForumPostResponseAnswer from './answers/ForumPostResponse'; export default class Answers extends Component { + static renderFileUpload({ question, readOnly, answerId }) { + return ; + } + + static renderForumPostResponse({ question, readOnly, answerId }) { + return ( + + ); + } + static renderMultipleChoice({ question, readOnly, @@ -40,24 +54,8 @@ export default class Answers extends Component { ); } - static renderTextResponse({ question, readOnly, answerId, graderView }) { - return ( - - ); - } - - static renderFileUpload({ question, readOnly, answerId }) { - return ; - } - - static renderVoiceResponse({ question, readOnly, answerId }) { - return ( - - ); + static renderProgramming({ question, readOnly, answerId }) { + return ; } static renderScribing({ question, readOnly, answerId }) { @@ -70,13 +68,15 @@ export default class Answers extends Component { ); } - static renderProgramming({ question, readOnly, answerId }) { - return ; + static renderTextResponse({ question, readOnly, answerId, graderView }) { + return ( + + ); } - static renderForumPostResponse({ question, readOnly, answerId }) { + static renderVoiceResponse({ question, readOnly, answerId }) { return ( - - ); - } -} +const Editor = (props) => { + const { readOnly, filename, name, language } = props; + return ( + + ); +}; + +export default Editor; Editor.propTypes = { readOnly: PropTypes.bool, diff --git a/client/app/bundles/course/assessment/submission/components/FileInput.jsx b/client/app/bundles/course/assessment/submission/components/FileInput.jsx index ef56febeef9..2e36da74ab2 100644 --- a/client/app/bundles/course/assessment/submission/components/FileInput.jsx +++ b/client/app/bundles/course/assessment/submission/components/FileInput.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import Dropzone from 'react-dropzone'; import { Field } from 'redux-form'; diff --git a/client/app/bundles/course/assessment/submission/components/ProgressPanel.jsx b/client/app/bundles/course/assessment/submission/components/ProgressPanel.jsx index fd43c5fdf0c..d22d9118f72 100644 --- a/client/app/bundles/course/assessment/submission/components/ProgressPanel.jsx +++ b/client/app/bundles/course/assessment/submission/components/ProgressPanel.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import { injectIntl, intlShape } from 'react-intl'; import { Card, CardHeader, CardText } from 'material-ui/Card'; import Paper from 'material-ui/Paper'; diff --git a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/AddCommentIcon.jsx b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/AddCommentIcon.jsx index b7a210454c1..c82578916da 100644 --- a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/AddCommentIcon.jsx +++ b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/AddCommentIcon.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; export default class AddCommentIcon extends Component { diff --git a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/Checkbox.jsx b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/Checkbox.jsx index 4717e3e9ec2..63cad725b9f 100644 --- a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/Checkbox.jsx +++ b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/Checkbox.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; export default class Checkbox extends Component { @@ -22,7 +22,7 @@ export default class Checkbox extends Component { } Checkbox.propTypes = { - style: PropTypes.object, // eslint-disable-line react/forbid-prop-types + style: PropTypes.object, checked: PropTypes.bool.isRequired, disabled: PropTypes.bool.isRequired, indeterminate: PropTypes.bool, diff --git a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/NarrowEditor.jsx b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/NarrowEditor.jsx index 807a1035cf4..39dc9c77814 100644 --- a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/NarrowEditor.jsx +++ b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/NarrowEditor.jsx @@ -1,11 +1,9 @@ -import React, { Component } from 'react'; -import { findDOMNode } from 'react-dom'; +import { useRef, useState, useCallback, useEffect } from 'react'; import PropTypes from 'prop-types'; import { Overlay } from 'react-overlays'; import { grey200, grey400 } from 'material-ui/styles/colors'; import AddCommentIcon from './AddCommentIcon'; -import OverlayTooltip from './OverlayTooltip'; import Annotations from '../../containers/Annotations'; import { annotationShape } from '../../propTypes'; @@ -36,6 +34,7 @@ const styles = { borderRightStyle: 'solid', borderRightColor: grey200, padding: '0 5px', + position: 'relative', }, editorLineNumberWithComments: { height: 20, @@ -47,141 +46,217 @@ const styles = { borderRightStyle: 'solid', borderRightColor: grey200, padding: '0 5px', + position: 'relative', + }, + tooltipStyle: { + position: 'absolute', + top: 20, + left: 50, + }, + tooltipInnerStyle: { + color: '#000', + textAlign: 'center', + borderRadius: 3, + backgroundColor: '#FFF', }, }; -export default class NarrowEditor extends Component { - constructor(props) { - super(props); - this.state = { - activeComment: 0, - lineHovered: 0, - }; - } - - toggleComment(lineNumber) { - this.props.toggleLine(lineNumber); - this.setState({ activeComment: lineNumber }); - } - - expandComment(lineNumber) { - this.props.expandLine(lineNumber); - this.setState({ activeComment: lineNumber }); - } - - renderComments(lineNumber) { - const { activeComment } = this.state; - const { answerId, fileId, annotations, expanded, collapseLine } = - this.props; - const annotation = annotations.find((a) => a.line === lineNumber); - const placement = 'right'; +const LineNumberColumn = (props) => { + const triggerRef = useRef(null); + const containerRef = useRef(null); + + const { + lineNumber, + lineHovered, + setLineHovered, + toggleComment, + expandComment, + annotations, + editorWidth, + } = props; + + const annotation = annotations.find((a) => a.line === lineNumber); + + const renderComments = () => { + const { + answerId, + fileId, + expanded, + collapseLine, + activeComment, + setActiveComment, + } = props; return ( collapseLine(lineNumber)} - placement={placement} + placement="right" rootClose - target={() => findDOMNode(this[`comment-${lineNumber}`])} // eslint-disable-line react/no-find-dom-node + target={triggerRef} + container={containerRef} > - -
this.setState({ activeComment: lineNumber })}> - -
-
-
- ); - } - - renderLineNumberColumn(lineNumber) { - const { lineHovered } = this.state; - const { annotations } = this.props; - const annotation = annotations.find((a) => a.line === lineNumber); - return ( - <> -
this.toggleComment(lineNumber)} - onMouseOver={() => this.setState({ lineHovered: lineNumber })} - onMouseOut={() => this.setState({ lineHovered: 0 })} - > + {({ props: props2 }) => (
{ - this[`comment-${lineNumber}`] = c; + ref={props2.ref} + style={{ + width: Math.max(0, editorWidth - 2), + zIndex: activeComment === lineNumber ? 1000 : lineNumber, + ...styles.tooltipStyle, }} > - {lineNumber} +
+
setActiveComment(lineNumber)}> + +
+
- this.expandComment(lineNumber)} - hovered={lineHovered === lineNumber} - /> -
- {this.renderComments(lineNumber)} - + )} + ); - } + }; - render() { - /* eslint-disable react/no-array-index-key */ - const { content } = this.props; - return ( - - - - + + +
+ return ( + <> +
toggleComment(lineNumber)} + onMouseOver={() => setLineHovered(lineNumber)} + onMouseOut={() => setLineHovered(0)} + ref={containerRef} + > +
{lineNumber}
+ expandComment(lineNumber)} + hovered={lineHovered === lineNumber} + ref={triggerRef} + /> +
+ {renderComments(lineNumber)} + + ); +}; + +LineNumberColumn.propTypes = { + lineNumber: PropTypes.number.isRequired, + lineHovered: PropTypes.number.isRequired, + setLineHovered: PropTypes.func.isRequired, + setActiveComment: PropTypes.func.isRequired, + toggleComment: PropTypes.func.isRequired, + expandComment: PropTypes.func.isRequired, + activeComment: PropTypes.number.isRequired, + editorWidth: PropTypes.number.isRequired, + + expanded: PropTypes.arrayOf(PropTypes.bool).isRequired, + answerId: PropTypes.number.isRequired, + fileId: PropTypes.number.isRequired, + annotations: PropTypes.arrayOf(annotationShape), + collapseLine: PropTypes.func, +}; + +export default function NarrowEditor(props) { + const editorRef = useRef(); + const [editorWidth, setEditorWidth] = useState(0); + const [activeComment, setActiveComment] = useState(0); + const [lineHovered, setLineHovered] = useState(0); + + const getEditorWidth = useCallback(() => { + if (!editorRef || !editorRef.current) { + return; + } + setEditorWidth(editorRef.current.clientWidth - 50); // 50 is the width of the line number column + }, [editorRef]); + + useEffect(() => { + getEditorWidth(); + }, [getEditorWidth]); + + useEffect(() => { + window.addEventListener('resize', getEditorWidth); + + return () => window.removeEventListener('resize', getEditorWidth); + }, [getEditorWidth]); + + const expandComment = (lineNumber) => { + props.expandLine(lineNumber); + setActiveComment(lineNumber); + }; + + const toggleComment = (lineNumber) => { + props.toggleLine(lineNumber); + setActiveComment(lineNumber); + }; + + const renderLineNumberColumn = (lineNumber) => ( + + ); + + const { content } = props; + + /* eslint-disable react/no-array-index-key */ + return ( + + + + + - - - -
+ {content.map((line, index) => ( +
+ {renderLineNumberColumn(index + 1)} +
+ ))} +
+
{content.map((line, index) => ( -
- {this.renderLineNumberColumn(index + 1)} +
+
+                    
+                  
))} -
-
- {content.map((line, index) => ( -
-
-                      
-                    
-
- ))} -
-
- ); - /* eslint-enable react/no-array-index-key */ - } + +
+ ); + /* eslint-enable react/no-array-index-key */ } NarrowEditor.propTypes = { diff --git a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/OverlayTooltip.jsx b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/OverlayTooltip.jsx deleted file mode 100644 index d2f237a7122..00000000000 --- a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/OverlayTooltip.jsx +++ /dev/null @@ -1,96 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -const tooltipStyle = { - position: 'absolute', - padding: '0 5px', -}; - -const tooltipInnerStyle = { - padding: '3px 8px', - color: '#000', - textAlign: 'center', - borderRadius: 3, - backgroundColor: '#FFF', -}; - -const tooltipArrowStyle = { - position: 'absolute', - width: 0, - height: 0, - borderRightColor: 'transparent', - borderLeftColor: 'transparent', - borderTopColor: 'transparent', - borderBottomColor: 'transparent', - borderStyle: 'solid', -}; - -const placementStyles = { - left: { - tooltip: { marginLeft: -3, padding: '0 5px' }, - arrow: { - right: 0, - marginTop: -5, - borderWidth: '5px 0 5px 5px', - borderLeftColor: '#FFF', - }, - }, - right: { - tooltip: { marginRight: 3, padding: '0 5px' }, - arrow: { - left: 0, - marginTop: -5, - borderWidth: '5px 5px 5px 0', - borderRightColor: '#FFF', - }, - }, - bottom: { - tooltip: { marginBottom: 3, padding: '5px 0' }, - arrow: { - top: 0, - marginLeft: -5, - borderWidth: '0 5px 5px', - borderBottomColor: '#FFF', - }, - }, -}; - -export default class OverlayTooltip extends Component { - render() { - const { - style, - placement, - arrowOffsetLeft: left = placementStyles[placement].arrow.left, - arrowOffsetTop: top = placementStyles[placement].arrow.top, - children, - } = this.props; - - return ( -
-
-
{children}
-
- ); - } -} - -OverlayTooltip.propTypes = { - style: PropTypes.object, // eslint-disable-line react/forbid-prop-types - placement: PropTypes.oneOf(['left', 'right', 'bottom']).isRequired, - arrowOffsetLeft: PropTypes.string, - arrowOffsetTop: PropTypes.string, - children: PropTypes.node, -}; diff --git a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideComments.jsx b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideComments.jsx index 18e17a32411..03102268858 100644 --- a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideComments.jsx +++ b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideComments.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import Paper from 'material-ui/Paper'; import RaisedButton from 'material-ui/RaisedButton'; diff --git a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideEditor.jsx b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideEditor.jsx index 987c2e0700b..35e88a0960d 100644 --- a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideEditor.jsx +++ b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/WideEditor.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { grey200, grey400 } from 'material-ui/styles/colors'; @@ -67,39 +67,14 @@ export default class WideEditor extends Component { }; } - toggleComment(lineNumber) { - this.props.toggleLine(lineNumber); - this.setState({ activeComment: lineNumber }); - } - expandComment(lineNumber) { this.props.expandLine(lineNumber); this.setState({ activeComment: lineNumber }); } - renderLineNumberColumn(lineNumber) { - const { lineHovered } = this.state; - const { annotations } = this.props; - const annotation = annotations.find((a) => a.line === lineNumber); - - return ( -
this.toggleComment(lineNumber)} - onMouseOver={() => this.setState({ lineHovered: lineNumber })} - onMouseOut={() => this.setState({ lineHovered: -1 })} - > - {lineNumber} - this.expandComment(lineNumber)} - hovered={lineHovered === lineNumber} - /> -
- ); + toggleComment(lineNumber) { + this.props.toggleLine(lineNumber); + this.setState({ activeComment: lineNumber }); } renderComments() { @@ -170,6 +145,31 @@ export default class WideEditor extends Component { /* eslint-enable react/no-array-index-key */ } + renderLineNumberColumn(lineNumber) { + const { lineHovered } = this.state; + const { annotations } = this.props; + const annotation = annotations.find((a) => a.line === lineNumber); + + return ( +
this.toggleComment(lineNumber)} + onMouseOver={() => this.setState({ lineHovered: lineNumber })} + onMouseOut={() => this.setState({ lineHovered: -1 })} + > + {lineNumber} + this.expandComment(lineNumber)} + hovered={lineHovered === lineNumber} + /> +
+ ); + } + render() { return ( diff --git a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/index.jsx b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/index.jsx index 3a8414d142e..98d5948d1ac 100644 --- a/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/index.jsx +++ b/client/app/bundles/course/assessment/submission/components/ReadOnlyEditor/index.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; @@ -23,8 +23,6 @@ class ReadOnlyEditor extends Component { const initialEditorMode = props.annotations.length > 0 ? EDITOR_MODE_WIDE : EDITOR_MODE_NARROW; this.state = { expanded, editorMode: initialEditorMode }; - - this.showCommentsPanel = this.showCommentsPanel.bind(this); } componentDidUpdate(prevProps) { @@ -56,6 +54,15 @@ class ReadOnlyEditor extends Component { } } + setAllCommentStateCollapsed() { + const { expanded } = this.state; + const newExpanded = expanded.slice(0); + newExpanded.forEach((_, index) => { + newExpanded[index] = false; + }); + this.setState({ expanded: newExpanded }); + } + setAllCommentStateExpanded() { const { expanded } = this.state; const { annotations } = this.props; @@ -71,12 +78,10 @@ class ReadOnlyEditor extends Component { this.setState({ expanded: newExpanded }); } - setAllCommentStateCollapsed() { + setCollapsedLine(lineNumber) { const { expanded } = this.state; const newExpanded = expanded.slice(0); - newExpanded.forEach((_, index) => { - newExpanded[index] = false; - }); + newExpanded[lineNumber - 1] = false; this.setState({ expanded: newExpanded }); } @@ -90,19 +95,14 @@ class ReadOnlyEditor extends Component { this.setState({ expanded: newExpanded }); } - setCollapsedLine(lineNumber) { - const { expanded } = this.state; - const newExpanded = expanded.slice(0); - newExpanded[lineNumber - 1] = false; - this.setState({ expanded: newExpanded }); - } - - toggleCommentLine(lineNumber) { - const { expanded } = this.state; - const newExpanded = expanded.slice(0); - newExpanded[lineNumber - 1] = !newExpanded[lineNumber - 1]; - this.setState({ expanded: newExpanded }); - } + showCommentsPanel = () => { + this.setAllCommentStateCollapsed(); + if (this.state.editorMode === EDITOR_MODE_NARROW) { + this.setState({ editorMode: EDITOR_MODE_WIDE }); + } else { + this.setState({ editorMode: EDITOR_MODE_NARROW }); + } + }; isAllExpanded() { const { expanded } = this.state; @@ -135,13 +135,21 @@ class ReadOnlyEditor extends Component { return false; } - showCommentsPanel() { - this.setAllCommentStateCollapsed(); - if (this.state.editorMode === EDITOR_MODE_NARROW) { - this.setState({ editorMode: EDITOR_MODE_WIDE }); - } else { - this.setState({ editorMode: EDITOR_MODE_NARROW }); - } + toggleCommentLine(lineNumber) { + const { expanded } = this.state; + const newExpanded = expanded.slice(0); + newExpanded[lineNumber - 1] = !newExpanded[lineNumber - 1]; + this.setState({ expanded: newExpanded }); + } + + renderEditor(editorProps) { + const { editorMode } = this.state; + + return editorMode === EDITOR_MODE_NARROW ? ( + + ) : ( + + ); } renderExpandAllToggle() { @@ -184,16 +192,6 @@ class ReadOnlyEditor extends Component { ); } - renderEditor(editorProps) { - const { editorMode } = this.state; - - return editorMode === EDITOR_MODE_NARROW ? ( - - ) : ( - - ); - } - render() { const { expanded } = this.state; const { answerId, fileId, annotations, content } = this.props; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/LayersComponent.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/LayersComponent.jsx index 779c3e9ee48..e2df21400ff 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/LayersComponent.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/LayersComponent.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Popover from 'material-ui/Popover'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/SavingIndicator.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/SavingIndicator.jsx index b68f164836d..fae69a4cf67 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/SavingIndicator.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/SavingIndicator.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import { scribingTranslations as translations } from '../../translations'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingCanvas.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingCanvas.jsx index 36655d4d8b8..1d9c09a2394 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingCanvas.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingCanvas.jsx @@ -1,7 +1,6 @@ -/* eslint no-mixed-operators: "off" */ /* eslint react/sort-comp: "off" */ /* eslint no-undef: "off" */ // For usage of fabric -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import LoadingIndicator from 'lib/components/LoadingIndicator'; @@ -72,7 +71,7 @@ const styles = { }, }; -export default class ScribingCanvas extends React.Component { +export default class ScribingCanvas extends Component { constructor(props) { super(props); @@ -107,7 +106,7 @@ export default class ScribingCanvas extends React.Component { }, nextProps.scribing.canvasZoom, ); - this.canvas.trigger('mouse:move', { isForced: true }); + this.canvas.fire('mouse:move', { isForced: true }); if (nextProps.scribing.isEnableObjectSelection) { // Objects are selectable in Type tool, dont have to enableObjectSelection again @@ -169,42 +168,97 @@ export default class ScribingCanvas extends React.Component { return !this.props.scribing.isCanvasLoaded; } - disableObjectSelection() { - this.canvas.forEachObject((object) => { - object.selectable = false; // eslint-disable-line no-param-reassign - object.hoverCursor = this.currentCursor; // eslint-disable-line no-param-reassign - }); - } + onKeyDown = (event) => { + if (!this.canvas) return; - // This method clears the selection-disabled scribbles - // and reloads them to enable selection again - enableObjectSelection() { - const canvasState = - this.props.scribing.canvasStates[this.props.scribing.currentStateIndex]; - const userScribbles = this.getFabricObjectsFromJson(canvasState); - this.canvas.clear(); - this.canvas.setBackground(); - this.props.scribing.layers.forEach((layer) => - this.canvas.add(layer.scribbleGroup), - ); - userScribbles.forEach((scribble) => { - if (scribble.type === 'i-text') { - scribble.setControlsVisibility({ - bl: false, - br: false, - mb: false, - ml: false, - mr: false, - mt: false, - tl: false, - tr: false, - }); + const activeObject = this.canvas.getActiveObject(); + const activeObjects = this.canvas.getActiveObjects(); + + switch (event.keyCode) { + case 8: // Backspace key + case 46: { + // Delete key + this.canvas.discardActiveObject(); + activeObjects.forEach((object) => this.canvas.remove(object)); + break; } - this.canvas.add(scribble); - }); - this.canvas.renderAll(); - this.isScribblesLoaded = true; - } + case 67: { + // Ctrl+C + if (event.ctrlKey || event.metaKey) { + event.preventDefault(); + + this.copiedObjects = []; + activeObjects.forEach((obj) => this.copiedObjects.push(obj)); + this.copyLeft = activeObject.left; + this.copyTop = activeObject.top; + } + break; + } + case 86: { + // Ctrl+V + if (event.ctrlKey || event.metaKey) { + event.preventDefault(); + + this.canvas.discardActiveObject(); + + const newObjects = []; + let newObj = {}; + + // Don't wrap single object in group, + // in case it's i-text and we want it to be editable at first tap + if (this.copiedObjects.length === 1) { + const obj = this.copiedObjects[0]; + if (obj.type === 'i-text') { + newObj = this.cloneText(obj); + } else { + obj.clone((c) => { + newObj = c; + }); + } + + this.setCopiedCanvasObjectPosition(newObj); + this.canvas.add(newObj); + this.canvas.setActiveObject(newObj); + this.canvas.renderAll(); + } else { + // Cloning a group of objects + this.copiedObjects.forEach((obj) => { + if (obj.type === 'i-text') { + newObj = this.cloneText(obj); + } else { + obj.clone((c) => { + newObj = c; + }); + } + newObj.setCoords(); + this.canvas.add(newObj); + newObjects.push(newObj); + }); + const selection = new fabric.ActiveSelection(newObjects, { + canvas: this.canvas, + }); + + this.setCopiedCanvasObjectPosition(selection); + this.canvas.setActiveObject(selection); + this.canvas.renderAll(); + } + } + break; + } + case 90: { + // Ctrl-Z + if (event.ctrlKey || event.metaKey) { + if (event.shiftKey) { + this.redo(); + } else { + this.undo(); + } + } + break; + } + default: + } + }; // Canvas Event Handlers @@ -472,6 +526,16 @@ export default class ScribingCanvas extends React.Component { } }; + onMouseOut = () => { + this.isOverText = false; + }; + + onMouseOver = (options) => { + if (options.target && options.target.type === 'i-text') { + this.isOverText = true; + } + }; + onMouseUpCanvas = () => { this.mouseDownFlag = false; @@ -513,16 +577,6 @@ export default class ScribingCanvas extends React.Component { } }; - onMouseOver = (options) => { - if (options.target && options.target.type === 'i-text') { - this.isOverText = true; - } - }; - - onMouseOut = () => { - this.isOverText = false; - }; - // Limit moving of objects to within the canvas onObjectMovingCanvas = (options) => { const obj = options.target; @@ -563,100 +617,196 @@ export default class ScribingCanvas extends React.Component { } }; - // Helpers + onObjectSelected = (options) => { + if (options.target) { + this.props.setActiveObject(this.props.answerId, options.target); + } + }; - // Legacy code needed to support migrated v1 scribing questions. - // This code scales/unscales the scribbles by a standard number. - normaliseScribble(scribble, isDenormalise) { - const STANDARD = 1000; - let factor; + onSelectionCleared = () => { + this.props.setActiveObject(this.props.answerId, undefined); + }; - if (isDenormalise) { - factor = this.canvas.getWidth() / STANDARD; - } else { - factor = STANDARD / this.canvas.getWidth(); + onTextChanged = (options) => { + if (options.target.text.trim() === '') { + this.canvas.remove(options.target); } + this.textCreated = false; + this.saveScribbles(); + this.props.setToolSelected(this.props.answerId, scribingTools.SELECT); + this.props.setCanvasCursor(this.props.answerId, 'default'); + }; - scribble.set({ - scaleX: scribble.scaleX * factor, - scaleY: scribble.scaleY * factor, - left: scribble.left * factor, - top: scribble.top * factor, - }); + getCanvasPoint(event) { + if (!event) return undefined; + const pointer = this.canvas.getPointer(event); + return { + x: pointer.x, + y: pointer.y, + }; } - denormaliseScribble(scribble) { - return this.normaliseScribble(scribble, true); - } + /* + * @param {string} json: JSON string with 'objects' key containing array of scribbles + * @return {array} array of Fabric objects + */ + getFabricObjectsFromJson = (json) => { + const objects = JSON.parse(json).objects; + const userScribbles = []; - initializeScribblesAndBackground = () => { - const { scribbles } = this.props.scribing.answer; - const { layers } = this.props.scribing; - const userId = this.props.scribing.answer.user_id; + // Parse JSON to Fabric.js objects + for (let i = 0; i < objects.length; i++) { + if (objects[i].type !== 'group') { + const klass = fabric.util.getKlass(objects[i].type); + klass.fromObject(objects[i], (obj) => { + this.denormaliseScribble(obj); + userScribbles.push(obj); + }); + } + } + return userScribbles; + }; - this.isScribblesLoaded = false; - let userScribble = []; + getMousePoint = (event) => ({ + x: event.clientX, + y: event.clientY, + }); - layers.forEach((layer) => this.canvas.add(layer.scribbleGroup)); + getScribbleJSON() { + // Remove non-user scribings in canvas + this.props.scribing.layers.forEach((layer) => { + if (layer.creator_id !== this.props.scribing.answer.user_id) { + layer.showLayer(false); + } + }); - if (scribbles) { - scribbles.forEach((scribble) => { - const fabricObjs = this.getFabricObjectsFromJson(scribble.content); + // Only save rescaled user scribings + const objects = this.canvas._objects; + objects.forEach((obj) => { + this.normaliseScribble(obj); + }); + const json = JSON.stringify(objects); - // Create layer for each user's scribble - // Scribbles in layers have selection disabled - if (scribble.creator_id !== userId) { - // eslint-disable-next-line no-undef - const scribbleGroup = new fabric.Group(fabricObjs); - scribbleGroup.selectable = false; + // Scale back user scribings + objects.forEach((obj) => { + this.denormaliseScribble(obj); + }); - const showLayer = (isShown) => { - // eslint-disable-next-line no-param-reassign - scribbleGroup._objects.forEach((obj) => obj.setVisible(isShown)); - this.canvas.renderAll(); - }; - // Populate layers list - const newScribble = { - ...scribble, - isDisplayed: true, - showLayer, - scribbleGroup, - }; - this.props.addLayer(this.props.answerId, newScribble); - this.canvas.add(scribbleGroup); - } else if (scribble.creator_id === userId) { - // Add other user's layers first to avoid blocking of user's layer - userScribble = fabricObjs; - } - }); + // Add back non-user scribings according canvas state + this.props.scribing.layers.forEach((layer) => + layer.showLayer(layer.isDisplayed), + ); + return `{"objects": ${json}}`; + } - // Layer for current user's scribble - // Enables scribble selection - userScribble.forEach((obj) => { - // Don't allow scaling of text object - if (obj.type === 'i-text') { - obj.setControlsVisibility({ - bl: false, - br: false, - mb: false, - ml: false, - mr: false, - mt: false, - tl: false, - tr: false, - }); - } - this.canvas.add(obj); - }); - } + setCopiedCanvasObjectPosition(obj) { + // Shift copied object to the left if there's space + this.copyLeft = + this.copyLeft + obj.width > this.canvas.width + ? this.copyLeft + : this.copyLeft + 10; + obj.left = this.copyLeft; // eslint-disable-line no-param-reassign + // Shift copied object down if there's space + this.copyTop = + this.copyTop + obj.height > this.canvas.height + ? this.copyTop + : this.copyTop + 10; + obj.top = this.copyTop; // eslint-disable-line no-param-reassign + + obj.setCoords(); + } + + setCurrentCanvasState = (stateIndex) => { + const userScribbles = this.getFabricObjectsFromJson( + this.props.scribing.canvasStates[stateIndex], + ); + + this.canvas.clear(); this.canvas.setBackground(); + this.props.scribing.layers.forEach((layer) => + this.canvas.add(layer.scribbleGroup), + ); + userScribbles.forEach((scribble) => this.canvas.add(scribble)); this.canvas.renderAll(); this.isScribblesLoaded = true; - this.saveScribbles(); // Add initial state as index 0 is states history + + this.props.setCurrentStateIndex(this.props.answerId, stateIndex); }; + // Utility Helpers + cloneText = (obj) => { + const newObj = new fabric.IText(obj.text, { + left: obj.left, + top: obj.top, + fontFamily: obj.fontFamily, + fontSize: obj.fontSize, + fill: obj.fill, + padding: 5, + }); + newObj.setControlsVisibility({ + bl: false, + br: false, + mb: false, + ml: false, + mr: false, + mt: false, + tl: false, + tr: false, + }); + return newObj; + }; + + denormaliseScribble(scribble) { + return this.normaliseScribble(scribble, true); + } + + disableObjectSelection() { + this.canvas.forEachObject((object) => { + object.selectable = false; // eslint-disable-line no-param-reassign + object.hoverCursor = this.currentCursor; // eslint-disable-line no-param-reassign + }); + } + + // This method clears the selection-disabled scribbles + // and reloads them to enable selection again + enableObjectSelection() { + const canvasState = + this.props.scribing.canvasStates[this.props.scribing.currentStateIndex]; + const userScribbles = this.getFabricObjectsFromJson(canvasState); + this.canvas.clear(); + this.canvas.setBackground(); + this.props.scribing.layers.forEach((layer) => + this.canvas.add(layer.scribbleGroup), + ); + userScribbles.forEach((scribble) => { + if (scribble.type === 'i-text') { + scribble.setControlsVisibility({ + bl: false, + br: false, + mb: false, + ml: false, + mr: false, + mt: false, + tl: false, + tr: false, + }); + } + this.canvas.add(scribble); + }); + this.canvas.renderAll(); + this.isScribblesLoaded = true; + } + + // Generates the left, top, width and height of the drag + generateMouseDragProperties = (point1, point2) => ({ + left: point1.x < point2.x ? point1.x : point2.x, + top: point1.y < point2.y ? point1.y : point2.y, + width: Math.abs(point1.x - point2.x), + height: Math.abs(point1.y - point2.y), + }); + initializeCanvas(answerId, imageUrl) { - this.image = new Image(); // eslint-disable-line no-undef + this.image = new Image(); this.image.src = imageUrl; this.image.onload = () => { @@ -736,21 +886,92 @@ export default class ScribingCanvas extends React.Component { }; } - // Adjusting canvas height after canvas initialization - // helps to scale/move scribbles accordingly - scaleCanvas() { - this.canvas.setWidth(this.width); - this.canvas.setHeight(this.height); - this.canvas.renderAll(); - } + initializeScribblesAndBackground = () => { + const { scribbles } = this.props.scribing.answer; + const { layers } = this.props.scribing; + const userId = this.props.scribing.answer.user_id; - // Scribble Helpers - undo = () => { - if (this.props.scribing.currentStateIndex > 0) { - this.setCurrentCanvasState(this.props.scribing.currentStateIndex - 1); + this.isScribblesLoaded = false; + let userScribble = []; + + layers.forEach((layer) => this.canvas.add(layer.scribbleGroup)); + + if (scribbles) { + scribbles.forEach((scribble) => { + const fabricObjs = this.getFabricObjectsFromJson(scribble.content); + + // Create layer for each user's scribble + // Scribbles in layers have selection disabled + if (scribble.creator_id !== userId) { + const scribbleGroup = new fabric.Group(fabricObjs); + scribbleGroup.selectable = false; + + const showLayer = (isShown) => { + scribbleGroup._objects.forEach((obj) => obj.setVisible(isShown)); + this.canvas.renderAll(); + }; + // Populate layers list + const newScribble = { + ...scribble, + isDisplayed: true, + showLayer, + scribbleGroup, + }; + this.props.addLayer(this.props.answerId, newScribble); + this.canvas.add(scribbleGroup); + } else if (scribble.creator_id === userId) { + // Add other user's layers first to avoid blocking of user's layer + userScribble = fabricObjs; + } + }); + + // Layer for current user's scribble + // Enables scribble selection + userScribble.forEach((obj) => { + // Don't allow scaling of text object + if (obj.type === 'i-text') { + obj.setControlsVisibility({ + bl: false, + br: false, + mb: false, + ml: false, + mr: false, + mt: false, + tl: false, + tr: false, + }); + } + this.canvas.add(obj); + }); } + this.canvas.setBackground(); + this.canvas.renderAll(); + this.isScribblesLoaded = true; + this.saveScribbles(); // Add initial state as index 0 is states history }; + // Helpers + + // Legacy code needed to support migrated v1 scribing questions. + // This code scales/unscales the scribbles by a standard number. + normaliseScribble(scribble, isDenormalise) { + const STANDARD = 1000; + let factor; + + if (isDenormalise) { + factor = this.canvas.getWidth() / STANDARD; + } else { + factor = STANDARD / this.canvas.getWidth(); + } + + scribble.set({ + scaleX: scribble.scaleX * factor, + scaleY: scribble.scaleY * factor, + left: scribble.left * factor, + top: scribble.top * factor, + }); + } + redo = () => { if ( this.props.scribing.canvasStates.length - 1 > @@ -761,44 +982,6 @@ export default class ScribingCanvas extends React.Component { } }; - /* - * @param {string} json: JSON string with 'objects' key containing array of scribbles - * @return {array} array of Fabric objects - */ - getFabricObjectsFromJson = (json) => { - const objects = JSON.parse(json).objects; - const userScribbles = []; - - // Parse JSON to Fabric.js objects - for (let i = 0; i < objects.length; i++) { - if (objects[i].type !== 'group') { - const klass = fabric.util.getKlass(objects[i].type); - klass.fromObject(objects[i], (obj) => { - this.denormaliseScribble(obj); - userScribbles.push(obj); - }); - } - } - return userScribbles; - }; - - setCurrentCanvasState = (stateIndex) => { - const userScribbles = this.getFabricObjectsFromJson( - this.props.scribing.canvasStates[stateIndex], - ); - - this.canvas.clear(); - this.canvas.setBackground(); - this.props.scribing.layers.forEach((layer) => - this.canvas.add(layer.scribbleGroup), - ); - userScribbles.forEach((scribble) => this.canvas.add(scribble)); - this.canvas.renderAll(); - this.isScribblesLoaded = true; - - this.props.setCurrentStateIndex(this.props.answerId, stateIndex); - }; - saveScribbles = () => new Promise((resolve) => { if (this.isScribblesLoaded) { @@ -826,207 +1009,21 @@ export default class ScribingCanvas extends React.Component { resolve(); }); - getScribbleJSON() { - // Remove non-user scribings in canvas - this.props.scribing.layers.forEach((layer) => { - if (layer.creator_id !== this.props.scribing.answer.user_id) { - layer.showLayer(false); - } - }); - - // Only save rescaled user scribings - const objects = this.canvas._objects; - objects.forEach((obj) => { - this.normaliseScribble(obj); - }); - const json = JSON.stringify(objects); - - // Scale back user scribings - objects.forEach((obj) => { - this.denormaliseScribble(obj); - }); - - // Add back non-user scribings according canvas state - this.props.scribing.layers.forEach((layer) => - layer.showLayer(layer.isDisplayed), - ); - return `{"objects": ${json}}`; + // Adjusting canvas height after canvas initialization + // helps to scale/move scribbles accordingly + scaleCanvas() { + this.canvas.setWidth(this.width); + this.canvas.setHeight(this.height); + this.canvas.renderAll(); } - onTextChanged = (options) => { - if (options.target.text.trim() === '') { - this.canvas.remove(options.target); - } - this.textCreated = false; - this.saveScribbles(); - this.props.setToolSelected(this.props.answerId, scribingTools.SELECT); - this.props.setCanvasCursor(this.props.answerId, 'default'); - }; - - onObjectSelected = (options) => { - if (options.target) { - this.props.setActiveObject(this.props.answerId, options.target); - } - }; - - onSelectionCleared = () => { - this.props.setActiveObject(this.props.answerId, undefined); - }; - - onKeyDown = (event) => { - if (!this.canvas) return; - - const activeObject = this.canvas.getActiveObject(); - const activeObjects = this.canvas.getActiveObjects(); - - switch (event.keyCode) { - case 8: // Backspace key - case 46: { - // Delete key - this.canvas.discardActiveObject(); - activeObjects.forEach((object) => this.canvas.remove(object)); - break; - } - case 67: { - // Ctrl+C - if (event.ctrlKey || event.metaKey) { - event.preventDefault(); - - this.copiedObjects = []; - activeObjects.forEach((obj) => this.copiedObjects.push(obj)); - this.copyLeft = activeObject.left; - this.copyTop = activeObject.top; - } - break; - } - case 86: { - // Ctrl+V - if (event.ctrlKey || event.metaKey) { - event.preventDefault(); - - this.canvas.discardActiveObject(); - - const newObjects = []; - let newObj = {}; - - // Don't wrap single object in group, - // in case it's i-text and we want it to be editable at first tap - if (this.copiedObjects.length === 1) { - const obj = this.copiedObjects[0]; - if (obj.type === 'i-text') { - newObj = this.cloneText(obj); - } else { - obj.clone((c) => { - newObj = c; - }); - } - - this.setCopiedCanvasObjectPosition(newObj); - this.canvas.add(newObj); - this.canvas.setActiveObject(newObj); - this.canvas.renderAll(); - } else { - // Cloning a group of objects - this.copiedObjects.forEach((obj) => { - if (obj.type === 'i-text') { - newObj = this.cloneText(obj); - } else { - obj.clone((c) => { - newObj = c; - }); - } - newObj.setCoords(); - this.canvas.add(newObj); - newObjects.push(newObj); - }); - const selection = new fabric.ActiveSelection(newObjects, { - canvas: this.canvas, - }); - - this.setCopiedCanvasObjectPosition(selection); - this.canvas.setActiveObject(selection); - this.canvas.renderAll(); - } - } - break; - } - case 90: { - // Ctrl-Z - if (event.ctrlKey || event.metaKey) { - if (event.shiftKey) { - this.redo(); - } else { - this.undo(); - } - } - break; - } - default: + // Scribble Helpers + undo = () => { + if (this.props.scribing.currentStateIndex > 0) { + this.setCurrentCanvasState(this.props.scribing.currentStateIndex - 1); } }; - // Utility Helpers - cloneText = (obj) => { - const newObj = new fabric.IText(obj.text, { - left: obj.left, - top: obj.top, - fontFamily: obj.fontFamily, - fontSize: obj.fontSize, - fill: obj.fill, - padding: 5, - }); - newObj.setControlsVisibility({ - bl: false, - br: false, - mb: false, - ml: false, - mr: false, - mt: false, - tl: false, - tr: false, - }); - return newObj; - }; - - setCopiedCanvasObjectPosition(obj) { - // Shift copied object to the left if there's space - this.copyLeft = - this.copyLeft + obj.width > this.canvas.width - ? this.copyLeft - : this.copyLeft + 10; - obj.left = this.copyLeft; // eslint-disable-line no-param-reassign - // Shift copied object down if there's space - this.copyTop = - this.copyTop + obj.height > this.canvas.height - ? this.copyTop - : this.copyTop + 10; - obj.top = this.copyTop; // eslint-disable-line no-param-reassign - - obj.setCoords(); - } - - getMousePoint = (event) => ({ - x: event.clientX, - y: event.clientY, - }); - - // Generates the left, top, width and height of the drag - generateMouseDragProperties = (point1, point2) => ({ - left: point1.x < point2.x ? point1.x : point2.x, - top: point1.y < point2.y ? point1.y : point2.y, - width: Math.abs(point1.x - point2.x), - height: Math.abs(point1.y - point2.y), - }); - - getCanvasPoint(event) { - if (!event) return undefined; - const pointer = this.canvas.getPointer(event); - return { - x: pointer.x, - y: pointer.y, - }; - } - render() { const answerId = this.props.answerId; const isCanvasLoaded = this.props.scribing.isCanvasLoaded; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingToolbar.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingToolbar.jsx index 18e84e0c914..a4bc50237ff 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingToolbar.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/ScribingToolbar.jsx @@ -1,5 +1,5 @@ /* eslint react/sort-comp: "off" */ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; @@ -124,6 +124,10 @@ class ScribingToolbar extends Component { onChangeFontSize = (event, index, value) => this.props.setFontSize(this.props.answerId, value); + onChangeSliderThickness = (event, toolType, value) => { + this.props.setToolThickness(this.props.answerId, toolType, value); + }; + onClickColorPicker = (event, toolType) => { this.setState(({ colorDropdowns }) => ({ colorDropdowns: { @@ -134,13 +138,34 @@ class ScribingToolbar extends Component { })); }; - onRequestCloseColorPicker = (toolType) => { - this.setState(({ colorDropdowns }) => ({ - colorDropdowns: { - ...colorDropdowns, - [toolType]: false, - }, - })); + onClickDelete = () => { + this.props.deleteCanvasObject(this.props.answerId); + }; + + onClickDrawingMode = () => { + this.props.setToolSelected(this.props.answerId, scribingTools.DRAW); + // isDrawingMode automatically disables selection mode in fabric.js + this.props.setDrawingMode(this.props.answerId, true); + }; + + onClickLineMode = () => { + this.props.setToolSelected(this.props.answerId, scribingTools.LINE); + this.props.setDrawingMode(this.props.answerId, false); + this.props.setCanvasCursor(this.props.answerId, 'crosshair'); + this.props.setDisableObjectSelection(this.props.answerId); + }; + + onClickLineStyleChip = (event, toolType, style) => { + // This prevents ghost click. + event.preventDefault(); + this.props.setLineStyleChip(this.props.answerId, toolType, style); + }; + + onClickMoveMode = () => { + this.props.setToolSelected(this.props.answerId, scribingTools.MOVE); + this.props.setDrawingMode(this.props.answerId, false); + this.props.setCanvasCursor(this.props.answerId, 'move'); + this.props.setDisableObjectSelection(this.props.answerId); }; onClickPopover = (event, popoverType) => { @@ -157,33 +182,22 @@ class ScribingToolbar extends Component { })); }; - onRequestClosePopover = (popoverType) => { - this.setState(({ popovers }) => ({ - popovers: { - ...popovers, - [popoverType]: false, - }, - })); - }; - - onClickLineStyleChip = (event, toolType, style) => { - // This prevents ghost click. - event.preventDefault(); - this.props.setLineStyleChip(this.props.answerId, toolType, style); - }; - - onChangeSliderThickness = (event, toolType, value) => { - this.props.setToolThickness(this.props.answerId, toolType, value); + onClickRedo = () => { + this.props.setRedo(this.props.answerId); }; - onClickTypingMode = () => { - this.props.setToolSelected(this.props.answerId, scribingTools.TYPE); + onClickSelectionMode = () => { + this.props.setToolSelected(this.props.answerId, scribingTools.SELECT); this.props.setDrawingMode(this.props.answerId, false); - this.props.setCanvasCursor(this.props.answerId, 'text'); + this.props.setCanvasCursor(this.props.answerId, 'default'); + this.props.setEnableObjectSelection(this.props.answerId); }; - onClickTypingIcon = () => { - this.onClickTypingMode(); + onClickShapeMode = () => { + this.props.setToolSelected(this.props.answerId, scribingTools.SHAPE); + this.props.setDrawingMode(this.props.answerId, false); + this.props.setCanvasCursor(this.props.answerId, 'crosshair'); + this.props.setDisableObjectSelection(this.props.answerId); }; onClickTypingChevron = (event) => { @@ -191,38 +205,18 @@ class ScribingToolbar extends Component { this.onClickPopover(event, scribingPopoverTypes.TYPE); }; - onClickDrawingMode = () => { - this.props.setToolSelected(this.props.answerId, scribingTools.DRAW); - // isDrawingMode automatically disables selection mode in fabric.js - this.props.setDrawingMode(this.props.answerId, true); - }; - - onClickLineMode = () => { - this.props.setToolSelected(this.props.answerId, scribingTools.LINE); - this.props.setDrawingMode(this.props.answerId, false); - this.props.setCanvasCursor(this.props.answerId, 'crosshair'); - this.props.setDisableObjectSelection(this.props.answerId); - }; - - onClickShapeMode = () => { - this.props.setToolSelected(this.props.answerId, scribingTools.SHAPE); - this.props.setDrawingMode(this.props.answerId, false); - this.props.setCanvasCursor(this.props.answerId, 'crosshair'); - this.props.setDisableObjectSelection(this.props.answerId); + onClickTypingIcon = () => { + this.onClickTypingMode(); }; - onClickSelectionMode = () => { - this.props.setToolSelected(this.props.answerId, scribingTools.SELECT); + onClickTypingMode = () => { + this.props.setToolSelected(this.props.answerId, scribingTools.TYPE); this.props.setDrawingMode(this.props.answerId, false); - this.props.setCanvasCursor(this.props.answerId, 'default'); - this.props.setEnableObjectSelection(this.props.answerId); + this.props.setCanvasCursor(this.props.answerId, 'text'); }; - onClickMoveMode = () => { - this.props.setToolSelected(this.props.answerId, scribingTools.MOVE); - this.props.setDrawingMode(this.props.answerId, false); - this.props.setCanvasCursor(this.props.answerId, 'move'); - this.props.setDisableObjectSelection(this.props.answerId); + onClickUndo = () => { + this.props.setUndo(this.props.answerId); }; onClickZoomIn = () => { @@ -235,18 +229,6 @@ class ScribingToolbar extends Component { this.props.setCanvasZoom(this.props.answerId, newZoom); }; - onClickDelete = () => { - this.props.deleteCanvasObject(this.props.answerId); - }; - - onClickUndo = () => { - this.props.setUndo(this.props.answerId); - }; - - onClickRedo = () => { - this.props.setRedo(this.props.answerId); - }; - onMouseEnter(toolType) { this.setState({ hoveredToolTip: toolType, @@ -259,17 +241,22 @@ class ScribingToolbar extends Component { }); }; - // Helpers - - setSelectedShape = (shape) => { - this.props.setSelectedShape(this.props.answerId, shape); + onRequestCloseColorPicker = (toolType) => { + this.setState(({ colorDropdowns }) => ({ + colorDropdowns: { + ...colorDropdowns, + [toolType]: false, + }, + })); }; - setToSelectTool = () => { - this.props.setToolSelected(this.props.answerId, scribingTools.SELECT); - this.props.setCanvasCursor(this.props.answerId, 'default'); - this.props.setEnableObjectSelection(this.props.answerId); - this.props.setDrawingMode(this.props.answerId, false); + onRequestClosePopover = (popoverType) => { + this.setState(({ popovers }) => ({ + popovers: { + ...popovers, + [popoverType]: false, + }, + })); }; getActiveObjectSelectedLineStyle = () => { @@ -291,6 +278,19 @@ class ScribingToolbar extends Component { return lineStyle; }; + // Helpers + + setSelectedShape = (shape) => { + this.props.setSelectedShape(this.props.answerId, shape); + }; + + setToSelectTool = () => { + this.props.setToolSelected(this.props.answerId, scribingTools.SELECT); + this.props.setCanvasCursor(this.props.answerId, 'default'); + this.props.setEnableObjectSelection(this.props.answerId); + this.props.setDrawingMode(this.props.answerId, false); + }; + render() { const { intl, scribing } = this.props; const lineToolStyle = { diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/ToolDropdown.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/ToolDropdown.jsx index e72e3bb8b03..e8297cfb168 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/ToolDropdown.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/ToolDropdown.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import FontIcon from 'material-ui/FontIcon'; import MaterialTooltip from 'material-ui/internal/Tooltip'; @@ -46,20 +46,6 @@ const style = { }; export default class ToolDropdown extends Component { - renderIcon() { - const { disabled, iconClassname, currentTool, toolType, iconComponent } = - this.props; - const iconStyle = disabled - ? style.disabled - : { color: currentTool === toolType ? blue500 : 'rgba(0, 0, 0, 0.4)' }; - - return iconComponent ? ( - iconComponent() - ) : ( - - ); - } - renderColorBar() { const { activeObject, disabled, colorBarBorder, colorBarBackground } = this.props; @@ -101,6 +87,20 @@ export default class ToolDropdown extends Component { return
; } + renderIcon() { + const { disabled, iconClassname, currentTool, toolType, iconComponent } = + this.props; + const iconStyle = disabled + ? style.disabled + : { color: currentTool === toolType ? blue500 : 'rgba(0, 0, 0, 0.4)' }; + + return iconComponent ? ( + iconComponent() + ) : ( + + ); + } + render() { const { disabled, diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/SavingIndicator.test.js b/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/SavingIndicator.test.js index 48958af619c..1666c97c6f3 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/SavingIndicator.test.js +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/SavingIndicator.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import { mount } from 'enzyme'; import MockAdapter from 'axios-mock-adapter'; @@ -89,7 +88,7 @@ describe('SavingIndicator', () => { payload: { answerId }, }); editPage.update(); - expect(editPage.find('SavingIndicator').prop('isSaving')).toEqual(true); + expect(editPage.find('SavingIndicator').prop('isSaving')).toBe(true); const editUrl = `/courses/${courseId}/assessments/${assessmentId}/submissions/${submissionId}/edit`; window.history.pushState({}, '', editUrl); @@ -107,7 +106,7 @@ describe('SavingIndicator', () => { await sleep(1); expect(spyUpdate).toHaveBeenCalled(); editPage.update(); - expect(editPage.find('SavingIndicator').prop('isSaved')).toEqual(true); + expect(editPage.find('SavingIndicator').prop('isSaved')).toBe(true); }); it('sets saving error', async () => { @@ -139,6 +138,6 @@ describe('SavingIndicator', () => { await sleep(1); expect(spyUpdate).toHaveBeenCalled(); editPage.update(); - expect(editPage.find('SavingIndicator').prop('hasError')).toEqual(true); + expect(editPage.find('SavingIndicator').prop('hasError')).toBe(true); }); }); diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/ScribingToolbar.test.js b/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/ScribingToolbar.test.js index c645d2117e2..b9adb68cf75 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/ScribingToolbar.test.js +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/ScribingToolbar.test.js @@ -1,8 +1,7 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { MemoryRouter } from 'react-router-dom'; import { mount } from 'enzyme'; -import shallowUntil from 'utils/shallowUntil'; +import shallowUntil from 'testUtils/shallowUntil'; import MockAdapter from 'axios-mock-adapter'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import CourseAPI from 'api/course'; @@ -176,9 +175,9 @@ describe('ScribingToolbar', () => { }, }); scribingToolbar.update(); - expect( - scribingToolbar.find('InjectIntl(TypePopover)').prop('open'), - ).toEqual(true); + expect(scribingToolbar.find('InjectIntl(TypePopover)').prop('open')).toBe( + true, + ); }); it('renders color pickers', async () => { @@ -204,7 +203,7 @@ describe('ScribingToolbar', () => { scribingToolbar .find('InjectIntl(TypePopover)') .prop('colorPickerPopoverOpen'), - ).toEqual(true); + ).toBe(true); scribingToolbar.setState({ colorDropdowns: { @@ -216,7 +215,7 @@ describe('ScribingToolbar', () => { scribingToolbar .find('InjectIntl(TypePopover)') .prop('colorPickerPopoverOpen'), - ).toEqual(false); + ).toBe(false); }); it('sets the color from the color picker', async () => { diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/index.test.js b/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/index.test.js index 74b19035809..bc3a84e5c65 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/index.test.js +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import { mount } from 'enzyme'; import ProviderWrapper from 'lib/components/ProviderWrapper'; @@ -78,6 +77,6 @@ describe('ScribingView', () => { , ); - expect(editPage.find('canvas').length).toBe(1); + expect(editPage.find('canvas')).toHaveLength(1); }); }); diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ColorPickerField.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ColorPickerField.jsx index fc0490be580..7ac5926c38b 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ColorPickerField.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ColorPickerField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import { SketchPicker } from 'react-color'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontFamilyField.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontFamilyField.jsx index e78559b9066..55d29852c37 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontFamilyField.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontFamilyField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import SelectField from 'material-ui/SelectField'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontSizeField.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontSizeField.jsx index f10c6460acb..8b2fcd3ee72 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontSizeField.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/FontSizeField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import SelectField from 'material-ui/SelectField'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineStyleField.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineStyleField.jsx index 1522dc83944..e90b4b45327 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineStyleField.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineStyleField.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Chip from 'material-ui/Chip'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineThicknessField.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineThicknessField.jsx index 094bff9d38d..9059bd924d8 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineThicknessField.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/LineThicknessField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Slider from 'material-ui/Slider'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ShapeField.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ShapeField.jsx index a0950051363..eb6905185ca 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ShapeField.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/ShapeField.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import FontIcon from 'material-ui/FontIcon'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/__test__/ColorPickerField.test.js b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/__test__/ColorPickerField.test.js index ba060911eed..04aa5aaffa7 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/fields/__test__/ColorPickerField.test.js +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/fields/__test__/ColorPickerField.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { mount } from 'enzyme'; import ColorPickerField from 'course/assessment/submission/components/ScribingView/fields/ColorPickerField'; @@ -33,6 +32,6 @@ describe('ColorPickerField', () => { }, }); - expect(colorPickerField.find('Checkbox').prop('checked')).toEqual(true); + expect(colorPickerField.find('Checkbox').prop('checked')).toBe(true); }); }); diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/index.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/index.jsx index eee73007b15..4c569d83530 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/index.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import scribingViewLoader from 'course/assessment/submission/loaders/ScribingViewLoader'; import ScribingToolbar from './ScribingToolbar'; @@ -17,8 +17,8 @@ const styles = { }, }; -export default class ScribingViewComponent extends React.Component { - componentWillMount() { +export default class ScribingViewComponent extends Component { + UNSAFE_componentWillMount() { scribingViewLoader().then(() => { this.forceUpdate(); }); diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/DrawPopover.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/DrawPopover.jsx index 985140f9c95..7e5b2da3016 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/DrawPopover.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/DrawPopover.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Popover, { PopoverAnimationVertical } from 'material-ui/Popover'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/LinePopover.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/LinePopover.jsx index 700135858c8..f6d628e8eaa 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/LinePopover.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/LinePopover.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Popover, { PopoverAnimationVertical } from 'material-ui/Popover'; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/ShapePopover.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/ShapePopover.jsx index d6bdabe723c..a5a5bd13d12 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/ShapePopover.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/ShapePopover.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Popover, { PopoverAnimationVertical } from 'material-ui/Popover'; @@ -63,21 +63,6 @@ const popoverStyles = { }; class ShapePopover extends Component { - renderShapeComponent() { - const { currentShape, setSelectedShape, intl } = this.props; - - return ( - <> -

{intl.formatMessage(translations.shape)}

- - - - ); - } - renderBorderComponent() { const { intl, @@ -152,6 +137,21 @@ class ShapePopover extends Component { ); } + renderShapeComponent() { + const { currentShape, setSelectedShape, intl } = this.props; + + return ( + <> +

{intl.formatMessage(translations.shape)}

+ + + + ); + } + render() { const { open, displayShapeField, anchorEl, onRequestClose } = this.props; diff --git a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/TypePopover.jsx b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/TypePopover.jsx index fa8dc10e6ce..1eb5520d608 100644 --- a/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/TypePopover.jsx +++ b/client/app/bundles/course/assessment/submission/components/ScribingView/popovers/TypePopover.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Popover, { PopoverAnimationVertical } from 'material-ui/Popover'; diff --git a/client/app/bundles/course/assessment/submission/components/SubmissionAnswer.jsx b/client/app/bundles/course/assessment/submission/components/SubmissionAnswer.jsx index 9fda741b689..82fea4bb5f5 100644 --- a/client/app/bundles/course/assessment/submission/components/SubmissionAnswer.jsx +++ b/client/app/bundles/course/assessment/submission/components/SubmissionAnswer.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, @@ -103,28 +103,6 @@ class SubmissionAnswer extends Component { } } - renderMissingRenderer() { - const { intl } = this.props; - return ( - - - {intl.formatMessage(translations.rendererNotImplemented)} - - - ); - } - - renderMissingAnswerPanel() { - const { intl } = this.props; - return ( - - - {intl.formatMessage(translations.missingAnswer)} - - - ); - } - renderHistoryToggle(question) { const { handleToggleViewHistoryMode, @@ -178,6 +156,28 @@ class SubmissionAnswer extends Component { return null; } + renderMissingAnswerPanel() { + const { intl } = this.props; + return ( + + + {intl.formatMessage(translations.missingAnswer)} + + + ); + } + + renderMissingRenderer() { + const { intl } = this.props; + return ( + + + {intl.formatMessage(translations.rendererNotImplemented)} + + + ); + } + render() { const { readOnly, showMcqMrqSolution, question, answerId, graderView } = this.props; diff --git a/client/app/bundles/course/assessment/submission/components/TextResponseSolutions.jsx b/client/app/bundles/course/assessment/submission/components/TextResponseSolutions.jsx index 891ca687178..4ad882290bc 100644 --- a/client/app/bundles/course/assessment/submission/components/TextResponseSolutions.jsx +++ b/client/app/bundles/course/assessment/submission/components/TextResponseSolutions.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { FormattedMessage } from 'react-intl'; import { Table, diff --git a/client/app/bundles/course/assessment/submission/components/answers/FileUpload.jsx b/client/app/bundles/course/assessment/submission/components/answers/FileUpload.jsx index e67ceb7ed88..fdf76e1fd3f 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/FileUpload.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/FileUpload.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { questionShape } from '../../propTypes'; diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/CardTitle.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/CardTitle.jsx index c30fb8b5e0c..8c36434654e 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/CardTitle.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/CardTitle.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { grey600 } from 'material-ui/styles/colors'; import PropTypes from 'prop-types'; @@ -18,16 +17,14 @@ const styles = { }, }; -export default class CardTitle extends React.Component { - render() { - return ( -
-
{this.props.type}
-
{this.props.title}
-
- ); - } -} +const CardTitle = ({ type, title }) => ( +
+
{type}
+
{title}
+
+); + +export default CardTitle; CardTitle.propTypes = { title: PropTypes.string.isRequired, diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumCard.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumCard.jsx index 8db683984aa..865295ffd25 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumCard.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumCard.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { defineMessages, FormattedMessage } from 'react-intl'; import { RaisedButton, @@ -52,7 +52,7 @@ const styles = { }, }; -export default class ForumCard extends React.Component { +export default class ForumCard extends Component { constructor(props) { super(props); this.state = { diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostOption.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostOption.jsx index 31370a52c34..12f1e4f1c72 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostOption.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostOption.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { white, blueGrey200, @@ -34,7 +34,7 @@ const styles = { * This is a wrapper around the general ForumPost component, * that provides "selectable" functionalities. */ -class ForumPostOption extends React.Component { +class ForumPostOption extends Component { handleClick(event, postPack) { const { intl } = this.props; if ( diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelect.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelect.jsx index c31583c715e..51d3d5c054f 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelect.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelect.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { RaisedButton } from 'material-ui'; import { grey700 } from 'material-ui/styles/colors'; import PropTypes from 'prop-types'; @@ -56,7 +56,7 @@ const styles = { }, }; -export default class ForumPostSelect extends React.Component { +export default class ForumPostSelect extends Component { constructor(props) { super(props); this.state = { @@ -113,18 +113,6 @@ export default class ForumPostSelect extends React.Component { this.props.input.onChange(postPacks); } - renderSelectedPostPacks(postPacks) { - return postPacks.map((postPack) => ( -
- this.handleRemovePostPack(postPack)} - /> -
- )); - } - renderInstruction(postPacks, maxPosts) { if (this.props.readOnly) { return ( @@ -154,6 +142,22 @@ export default class ForumPostSelect extends React.Component { ); } + renderSelectedPostPacks(postPacks) { + if (!postPacks) { + return null; + } + + return postPacks.map((postPack) => ( +
+ this.handleRemovePostPack(postPack)} + /> +
+ )); + } + render() { const postPacks = this.props.input.value; const maxPosts = this.props.question.maxPosts; diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelectDialog.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelectDialog.jsx index 7b57ff1e0ee..74e5bbafd91 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelectDialog.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ForumPostSelectDialog.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { Dialog, FlatButton } from 'material-ui'; import { cyan500 } from 'material-ui/styles/colors'; import PropTypes from 'prop-types'; @@ -76,7 +76,7 @@ const styles = { }, }; -export default class ForumPostSelectDialog extends React.Component { +export default class ForumPostSelectDialog extends Component { constructor(props) { super(props); this.state = { diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/Labels.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/Labels.jsx index fe06cfa3f2a..64610776057 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/Labels.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/Labels.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { red100, orange100 } from 'material-ui/styles/colors'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ParentPost.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ParentPost.jsx index b733a51aa16..597f5d9a610 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ParentPost.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/ParentPost.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/SelectedPostCard.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/SelectedPostCard.jsx index b47daf474e9..0dd3e86798b 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/SelectedPostCard.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/SelectedPostCard.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { green50, red700 } from 'material-ui/styles/colors'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -54,7 +54,19 @@ const styles = { }, }; -export default class SelectedPostCard extends React.Component { +export default class SelectedPostCard extends Component { + static renderLink(url, name) { + let renderedName = name; + if (renderedName.length > MAX_NAME_LENGTH) { + renderedName = `${renderedName.slice(0, MAX_NAME_LENGTH)}...`; + } + return ( + + {renderedName} + + ); + } + constructor(props) { super(props); this.state = { @@ -68,34 +80,6 @@ export default class SelectedPostCard extends React.Component { })); } - renderTrashIcon() { - if (this.props.readOnly) { - return null; - } - return ( - - ); - } - - static renderLink(url, name) { - let renderedName = name; - if (renderedName.length > MAX_NAME_LENGTH) { - renderedName = `${renderedName.slice(0, MAX_NAME_LENGTH)}...`; - } - return ( - - {renderedName} - - ); - } - renderLabel() { const { postPack } = this.props; const { forum, topic } = postPack; @@ -134,6 +118,22 @@ export default class SelectedPostCard extends React.Component { ); } + renderTrashIcon() { + if (this.props.readOnly) { + return null; + } + return ( + + ); + } + render() { const { postPack } = this.props; diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/TopicCard.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/TopicCard.jsx index d34955b6c39..f4b2283ee82 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/TopicCard.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/TopicCard.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { CardHeader, RaisedButton, @@ -49,7 +49,7 @@ const styles = { }, }; -export default class TopicCard extends React.Component { +export default class TopicCard extends Component { constructor(props) { super(props); this.state = { diff --git a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/index.jsx b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/index.jsx index 69db6e826c6..8363133cbd7 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/index.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/ForumPostResponse/index.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import { Field } from 'redux-form'; import PropTypes from 'prop-types'; diff --git a/client/app/bundles/course/assessment/submission/components/answers/MultipleChoice.jsx b/client/app/bundles/course/assessment/submission/components/answers/MultipleChoice.jsx index ed29a43e687..aa273e8236a 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/MultipleChoice.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/MultipleChoice.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; import { green50 } from 'material-ui/styles/colors'; diff --git a/client/app/bundles/course/assessment/submission/components/answers/MultipleResponse.jsx b/client/app/bundles/course/assessment/submission/components/answers/MultipleResponse.jsx index 652483ce09a..fbb647c0cda 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/MultipleResponse.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/MultipleResponse.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; import { green50 } from 'material-ui/styles/colors'; diff --git a/client/app/bundles/course/assessment/submission/components/answers/Programming/ProgrammingFile.jsx b/client/app/bundles/course/assessment/submission/components/answers/Programming/ProgrammingFile.jsx index 166376fa54c..e60ec628fa7 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/Programming/ProgrammingFile.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/Programming/ProgrammingFile.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { yellow100 } from 'material-ui/styles/colors'; @@ -31,7 +31,7 @@ const styles = { }, }; -class ProgrammingFile extends React.Component { +class ProgrammingFile extends Component { renderProgrammingEditor() { const { file, fieldName, language } = this.props; return ( diff --git a/client/app/bundles/course/assessment/submission/components/answers/Programming/__test__/ProgrammingFile.test.js b/client/app/bundles/course/assessment/submission/components/answers/Programming/__test__/ProgrammingFile.test.js index 4dae0618d80..6590d2ab678 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/Programming/__test__/ProgrammingFile.test.js +++ b/client/app/bundles/course/assessment/submission/components/answers/Programming/__test__/ProgrammingFile.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import { MemoryRouter } from 'react-router-dom'; import store from 'course/assessment/submission/store'; @@ -62,7 +61,7 @@ describe('', () => { buildContextOptions(store), ); - expect(programmingFile.find('a').length).toBe(1); + expect(programmingFile.find('a')).toHaveLength(1); }); it('does not render download link for files with empty content', async () => { @@ -95,6 +94,6 @@ describe('', () => { buildContextOptions(store), ); - expect(programmingFile.find('a').length).toBe(0); + expect(programmingFile.find('a')).toHaveLength(0); }); }); diff --git a/client/app/bundles/course/assessment/submission/components/answers/Programming/index.jsx b/client/app/bundles/course/assessment/submission/components/answers/Programming/index.jsx index a471bc04b61..03e815746ca 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/Programming/index.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/Programming/index.jsx @@ -1,7 +1,7 @@ import 'ace-builds/src-noconflict/mode-python'; import 'ace-builds/src-noconflict/theme-github'; -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FieldArray } from 'redux-form'; import ProgrammingFile from './ProgrammingFile'; @@ -10,7 +10,7 @@ import TestCaseView from '../../../containers/TestCaseView'; import { parseLanguages } from '../../../utils'; import { questionShape } from '../../../propTypes'; -class Programming extends React.Component { +class Programming extends Component { static renderProgrammingFiles({ fields, readOnly, answerId, language }) { return ( <> diff --git a/client/app/bundles/course/assessment/submission/components/answers/TextResponse.jsx b/client/app/bundles/course/assessment/submission/components/answers/TextResponse.jsx index fa2b5fb52a2..302f65c3634 100644 --- a/client/app/bundles/course/assessment/submission/components/answers/TextResponse.jsx +++ b/client/app/bundles/course/assessment/submission/components/answers/TextResponse.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; import RichTextField from 'lib/components/redux-form/RichTextField'; diff --git a/client/app/bundles/course/assessment/submission/components/pastAnswers/PastMultipleResponseAnswer.jsx b/client/app/bundles/course/assessment/submission/components/pastAnswers/PastMultipleResponseAnswer.jsx index 27ba549a6b1..7261e50b27c 100644 --- a/client/app/bundles/course/assessment/submission/components/pastAnswers/PastMultipleResponseAnswer.jsx +++ b/client/app/bundles/course/assessment/submission/components/pastAnswers/PastMultipleResponseAnswer.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { green50 } from 'material-ui/styles/colors'; import { RadioButton } from 'material-ui/RadioButton'; diff --git a/client/app/bundles/course/assessment/submission/components/pastAnswers/PastProgrammingAnswer.jsx b/client/app/bundles/course/assessment/submission/components/pastAnswers/PastProgrammingAnswer.jsx index 941c93e6839..3b579d38311 100644 --- a/client/app/bundles/course/assessment/submission/components/pastAnswers/PastProgrammingAnswer.jsx +++ b/client/app/bundles/course/assessment/submission/components/pastAnswers/PastProgrammingAnswer.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import ProgrammingImportEditor from '../../containers/ProgrammingImportEditor'; import ReadOnlyEditor from '../../containers/ReadOnlyEditor'; diff --git a/client/app/bundles/course/assessment/submission/containers/Annotations.jsx b/client/app/bundles/course/assessment/submission/containers/Annotations.jsx index 5172cc57b37..5cc68ab2006 100644 --- a/client/app/bundles/course/assessment/submission/containers/Annotations.jsx +++ b/client/app/bundles/course/assessment/submission/containers/Annotations.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter } from 'react-router'; @@ -98,7 +98,7 @@ VisibleAnnotations.propTypes = { isSubmittingNormalComment: PropTypes.bool, isSubmittingDelayedComment: PropTypes.bool, isUpdatingComment: PropTypes.bool, - annotations: {}, + annotations: PropTypes.object, }), fileId: PropTypes.number.isRequired, lineNumber: PropTypes.number.isRequired, diff --git a/client/app/bundles/course/assessment/submission/containers/Comments.jsx b/client/app/bundles/course/assessment/submission/containers/Comments.jsx index c763da86922..9b1d87e6860 100644 --- a/client/app/bundles/course/assessment/submission/containers/Comments.jsx +++ b/client/app/bundles/course/assessment/submission/containers/Comments.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; diff --git a/client/app/bundles/course/assessment/submission/containers/GradingPanel.jsx b/client/app/bundles/course/assessment/submission/containers/GradingPanel.jsx index 24db7620d38..acff9e5b45e 100644 --- a/client/app/bundles/course/assessment/submission/containers/GradingPanel.jsx +++ b/client/app/bundles/course/assessment/submission/containers/GradingPanel.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { injectIntl, intlShape, FormattedMessage } from 'react-intl'; @@ -67,44 +67,6 @@ class VisibleGradingPanel extends Component { } } - renderTotalGrade() { - const { - grading: { questions }, - submission: { maximumGrade }, - } = this.props; - return ( -
{`${VisibleGradingPanel.calculateTotalGrade( - questions, - )} / ${maximumGrade}`}
- ); - } - - renderSubmissionStatus() { - const { - intl, - submission: { workflowState }, - } = this.props; - return ( -
- {intl.formatMessage(translations[workflowState])} - {workflowState === workflowStates.Graded ? ( - - - - - - - - - ) : null} -
- ); - } - renderExperiencePoints() { const { grading: { exp, expMultiplier }, @@ -155,64 +117,6 @@ class VisibleGradingPanel extends Component { ); } - renderSubmissionTable() { - const { - submission: { - submitter, - workflowState, - bonusEndAt, - dueAt, - attemptedAt, - submittedAt, - grader, - gradedAt, - graderView, - }, - gamified, - intl, - } = this.props; - - const published = workflowState === workflowStates.Published; - const shouldRenderGrading = published || graderView; - - const tableRow = (field, value) => ( - - - - - {value} - - ); - - return ( -
-

{intl.formatMessage(translations.statistics)}

-
- - {tableRow('student', submitter)} - {tableRow('status', this.renderSubmissionStatus())} - {shouldRenderGrading - ? tableRow('totalGrade', this.renderTotalGrade()) - : null} - {shouldRenderGrading && gamified - ? tableRow('expAwarded', this.renderExperiencePoints()) - : null} - {bonusEndAt - ? tableRow('bonusEndAt', formatDateTime(bonusEndAt)) - : null} - {dueAt ? tableRow('dueAt', formatDateTime(dueAt)) : null} - {tableRow('attemptedAt', formatDateTime(attemptedAt))} - {tableRow('submittedAt', formatDateTime(submittedAt))} - {shouldRenderGrading ? tableRow('grader', grader) : null} - {shouldRenderGrading - ? tableRow('gradedAt', formatDateTime(gradedAt)) - : null} - -
-
- ); - } - renderGradeRow(question, showGrader) { const questionGrading = this.props.grading.questions[question.id]; const questionGrade = @@ -304,6 +208,102 @@ class VisibleGradingPanel extends Component { ); } + renderSubmissionStatus() { + const { + intl, + submission: { workflowState }, + } = this.props; + return ( +
+ {intl.formatMessage(translations[workflowState])} + {workflowState === workflowStates.Graded ? ( + + + + + + + + + ) : null} +
+ ); + } + + renderSubmissionTable() { + const { + submission: { + submitter, + workflowState, + bonusEndAt, + dueAt, + attemptedAt, + submittedAt, + grader, + gradedAt, + graderView, + }, + gamified, + intl, + } = this.props; + + const published = workflowState === workflowStates.Published; + const shouldRenderGrading = published || graderView; + + const tableRow = (field, value) => ( + + + + + {value} + + ); + + return ( +
+

{intl.formatMessage(translations.statistics)}

+ + + {tableRow('student', submitter)} + {tableRow('status', this.renderSubmissionStatus())} + {shouldRenderGrading + ? tableRow('totalGrade', this.renderTotalGrade()) + : null} + {shouldRenderGrading && gamified + ? tableRow('expAwarded', this.renderExperiencePoints()) + : null} + {bonusEndAt + ? tableRow('bonusEndAt', formatDateTime(bonusEndAt)) + : null} + {dueAt ? tableRow('dueAt', formatDateTime(dueAt)) : null} + {tableRow('attemptedAt', formatDateTime(attemptedAt))} + {tableRow('submittedAt', formatDateTime(submittedAt))} + {shouldRenderGrading ? tableRow('grader', grader) : null} + {shouldRenderGrading + ? tableRow('gradedAt', formatDateTime(gradedAt)) + : null} + +
+
+ ); + } + + renderTotalGrade() { + const { + grading: { questions }, + submission: { maximumGrade }, + } = this.props; + return ( +
{`${VisibleGradingPanel.calculateTotalGrade( + questions, + )} / ${maximumGrade}`}
+ ); + } + render() { return (
diff --git a/client/app/bundles/course/assessment/submission/containers/ImportedFileView.jsx b/client/app/bundles/course/assessment/submission/containers/ImportedFileView.jsx index ed14d1d8a78..4a660fa1d5a 100644 --- a/client/app/bundles/course/assessment/submission/containers/ImportedFileView.jsx +++ b/client/app/bundles/course/assessment/submission/containers/ImportedFileView.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { intlShape, injectIntl, defineMessages } from 'react-intl'; @@ -45,6 +45,24 @@ class VisibleImportedFileView extends Component { }; } + renderDeleteDialog() { + const { deleteFileId, deleteConfirmation } = this.state; + const { intl, handleDeleteFile } = this.props; + return ( + + this.setState({ deleteConfirmation: false, deleteFileId: null }) + } + onConfirm={() => { + handleDeleteFile(deleteFileId); + this.setState({ deleteConfirmation: false, deleteFileId: null }); + }} + message={intl.formatMessage(translations.deleteConfirmation)} + /> + ); + } + renderFile(file, index) { const { canDestroyFiles, displayFileIndex, handleFileTabbing } = this.props; @@ -72,24 +90,6 @@ class VisibleImportedFileView extends Component { ); } - renderDeleteDialog() { - const { deleteFileId, deleteConfirmation } = this.state; - const { intl, handleDeleteFile } = this.props; - return ( - - this.setState({ deleteConfirmation: false, deleteFileId: null }) - } - onConfirm={() => { - handleDeleteFile(deleteFileId); - this.setState({ deleteConfirmation: false, deleteFileId: null }); - }} - message={intl.formatMessage(translations.deleteConfirmation)} - /> - ); - } - render() { const { intl, files } = this.props; return ( diff --git a/client/app/bundles/course/assessment/submission/containers/PastAnswers.jsx b/client/app/bundles/course/assessment/submission/containers/PastAnswers.jsx index 00d08f615c2..23105122057 100644 --- a/client/app/bundles/course/assessment/submission/containers/PastAnswers.jsx +++ b/client/app/bundles/course/assessment/submission/containers/PastAnswers.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import SelectField from 'material-ui/SelectField'; @@ -24,12 +24,6 @@ const styles = { }; class PastAnswers extends Component { - constructor(props) { - super(props); - - this.renderReadOnlyPastAnswer = this.renderReadOnlyPastAnswer.bind(this); - } - getAnswersHistory(question, answer) { const { intl } = this.props; switch (question.type) { @@ -56,35 +50,6 @@ class PastAnswers extends Component { } } - renderReadOnlyPastAnswer(answerId) { - const { answers, intl, question } = this.props; - const answer = answers[answerId]; - const date = formatDateTime(answer.createdAt); - - return ( -
-

- {intl.formatMessage(translations.submittedAt)}: {date} -

- {this.getAnswersHistory(question, answer)} -
-
- ); - } - - renderSelectedPastAnswers(selectedAnswerIds) { - if (selectedAnswerIds.length > 0) { - return selectedAnswerIds.map(this.renderReadOnlyPastAnswer); - } - return ( - - - - - - ); - } - renderPastAnswerSelect() { const { answers, @@ -123,6 +88,35 @@ class PastAnswers extends Component { ); } + renderReadOnlyPastAnswer = (answerId) => { + const { answers, intl, question } = this.props; + const answer = answers[answerId]; + const date = formatDateTime(answer.createdAt); + + return ( +
+

+ {intl.formatMessage(translations.submittedAt)}: {date} +

+ {this.getAnswersHistory(question, answer)} +
+
+ ); + }; + + renderSelectedPastAnswers(selectedAnswerIds) { + if (selectedAnswerIds.length > 0) { + return selectedAnswerIds.map(this.renderReadOnlyPastAnswer); + } + return ( + + + + + + ); + } + render() { const { selectedAnswerIds, question, graderView } = this.props; const { TextResponse, Comprehension } = questionTypes; diff --git a/client/app/bundles/course/assessment/submission/containers/PostPreview.jsx b/client/app/bundles/course/assessment/submission/containers/PostPreview.jsx index d3920cdd007..c2ecc80ade4 100644 --- a/client/app/bundles/course/assessment/submission/containers/PostPreview.jsx +++ b/client/app/bundles/course/assessment/submission/containers/PostPreview.jsx @@ -1,4 +1,3 @@ -import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import stripHtmlTags from 'lib/helpers/htmlFormatHelpers'; @@ -16,20 +15,18 @@ const styles = { }, }; -class VisiblePostPreview extends Component { - render() { - const { style, creator, text } = this.props; - return ( -
- - {`${creator}: ${stripHtmlTags(text)}`} -
- ); - } -} +const VisiblePostPreview = (props) => { + const { style, creator, text } = props; + return ( +
+ + {`${creator}: ${stripHtmlTags(text)}`} +
+ ); +}; VisiblePostPreview.propTypes = { - style: PropTypes.object, // eslint-disable-line react/forbid-prop-types + style: PropTypes.object, annotation: annotationShape.isRequired, // eslint-disable-line react/no-unused-prop-types creator: PropTypes.string.isRequired, text: PropTypes.string.isRequired, diff --git a/client/app/bundles/course/assessment/submission/containers/ProgrammingImportEditor.jsx b/client/app/bundles/course/assessment/submission/containers/ProgrammingImportEditor.jsx index 9a277094e8b..b4cf0bfa9af 100644 --- a/client/app/bundles/course/assessment/submission/containers/ProgrammingImportEditor.jsx +++ b/client/app/bundles/course/assessment/submission/containers/ProgrammingImportEditor.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { intlShape, injectIntl } from 'react-intl'; @@ -60,14 +60,13 @@ class VisibleProgrammingImportEditor extends Component { constructor(props) { super(props); this.state = { displayFileIndex: 0 }; - this.handleDeleteFile = this.handleDeleteFile.bind(this); } - handleDeleteFile(fileId) { + handleDeleteFile = (fileId) => { const { dispatch, answerId, answers } = this.props; dispatch(deleteFile(answerId, fileId, answers)); this.setState({ displayFileIndex: 0 }); - } + }; renderProgrammingHistoryEditor(answer) { const { displayFileIndex } = this.state; diff --git a/client/app/bundles/course/assessment/submission/containers/QuestionGrade.jsx b/client/app/bundles/course/assessment/submission/containers/QuestionGrade.jsx index 3ccb4fef521..7e2aefd302a 100644 --- a/client/app/bundles/course/assessment/submission/containers/QuestionGrade.jsx +++ b/client/app/bundles/course/assessment/submission/containers/QuestionGrade.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Paper from 'material-ui/Paper'; diff --git a/client/app/bundles/course/assessment/submission/containers/ReadOnlyEditor.jsx b/client/app/bundles/course/assessment/submission/containers/ReadOnlyEditor.jsx index caa2899aa03..373a350293d 100644 --- a/client/app/bundles/course/assessment/submission/containers/ReadOnlyEditor.jsx +++ b/client/app/bundles/course/assessment/submission/containers/ReadOnlyEditor.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; diff --git a/client/app/bundles/course/assessment/submission/containers/ScribingView.jsx b/client/app/bundles/course/assessment/submission/containers/ScribingView.jsx index ce183c112f3..cb8b3cde293 100644 --- a/client/app/bundles/course/assessment/submission/containers/ScribingView.jsx +++ b/client/app/bundles/course/assessment/submission/containers/ScribingView.jsx @@ -1,14 +1,9 @@ -import React, { Component } from 'react'; import { connect } from 'react-redux'; import * as actions from '../actions/scribing'; import ScribingViewComponent from '../components/ScribingView'; -class ScribingViewContainer extends Component { - render() { - return ; - } -} +const ScribingViewContainer = (props) => ; function mapStateToProps(state, ownProps) { const { answerId } = ownProps; diff --git a/client/app/bundles/course/assessment/submission/containers/SubmissionsLayout.jsx b/client/app/bundles/course/assessment/submission/containers/SubmissionsLayout.jsx index 247c69e19c2..a4ca224f122 100644 --- a/client/app/bundles/course/assessment/submission/containers/SubmissionsLayout.jsx +++ b/client/app/bundles/course/assessment/submission/containers/SubmissionsLayout.jsx @@ -1,21 +1,20 @@ -import React, { Component } from 'react'; import { Switch, Route } from 'react-router-dom'; import SubmissionEditIndex from '../pages/SubmissionEditIndex'; import SubmissionsIndex from '../pages/SubmissionsIndex'; -export default class SubmissionsLayout extends Component { - render() { - const submissionsIndex = - '/courses/:courseId/assessments/:assessmentId/submissions'; - const submissionEdit = - '/courses/:courseId/assessments/:assessmentId/submissions/:submissionId/edit'; +const SubmissionsLayout = () => { + const submissionsIndex = + '/courses/:courseId/assessments/:assessmentId/submissions'; + const submissionEdit = + '/courses/:courseId/assessments/:assessmentId/submissions/:submissionId/edit'; - return ( - - - - - ); - } -} + return ( + + + + + ); +}; + +export default SubmissionsLayout; diff --git a/client/app/bundles/course/assessment/submission/containers/TestCaseView/__test__/index.test.js b/client/app/bundles/course/assessment/submission/containers/TestCaseView/__test__/index.test.js index 223ba312c2a..be0b26ac831 100644 --- a/client/app/bundles/course/assessment/submission/containers/TestCaseView/__test__/index.test.js +++ b/client/app/bundles/course/assessment/submission/containers/TestCaseView/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import { VisibleTestCaseView } from 'course/assessment/submission/containers/TestCaseView'; diff --git a/client/app/bundles/course/assessment/submission/containers/TestCaseView/index.jsx b/client/app/bundles/course/assessment/submission/containers/TestCaseView/index.jsx index c801b0b5fd0..6970e119d69 100644 --- a/client/app/bundles/course/assessment/submission/containers/TestCaseView/index.jsx +++ b/client/app/bundles/course/assessment/submission/containers/TestCaseView/index.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -111,60 +111,60 @@ const translations = defineMessages({ }); export class VisibleTestCaseView extends Component { - static renderStaffOnlyTestCasesWarning() { + static renderOutputStream(outputStreamType, output, showStaffOnlyWarning) { + return ( + + + + {showStaffOnlyWarning && + VisibleTestCaseView.renderStaffOnlyOutputStreamWarning()} + + } + /> + +
{output}
+
+
+ ); + } + + static renderStaffOnlyOutputStreamWarning() { return ( - - + + ); } - static renderStaffOnlyOutputStreamWarning() { + static renderStaffOnlyTestCasesWarning() { return ( - - + + ); } - static renderOutputStream(outputStreamType, output, showStaffOnlyWarning) { - return ( - - - - {showStaffOnlyWarning && - VisibleTestCaseView.renderStaffOnlyOutputStreamWarning()} - - } - /> - -
{output}
-
-
- ); - } - static renderTitle(testCaseType, warn) { return ( <> @@ -174,6 +174,56 @@ export class VisibleTestCaseView extends Component { ); } + renderTestCaseRow(testCase) { + const { + testCases: { canReadTests }, + } = this.props; + const { showPublicTestCasesOutput } = this.props; + + let testCaseResult = 'unattempted'; + let testCaseIcon; + if (testCase.passed !== undefined) { + testCaseResult = testCase.passed ? 'correct' : 'wrong'; + testCaseIcon = testCase.passed ? : ; + } + + const tableRowColumnFor = (field) => ( + {field} + ); + + const outputStyle = { whiteSpace: 'pre-wrap', fontFamily: 'monospace' }; + + return ( + + {canReadTests && tableRowColumnFor(testCase.identifier)} + {tableRowColumnFor( + , + )} + {tableRowColumnFor( + ( + + ) || '', + )} + {(canReadTests || showPublicTestCasesOutput) && + tableRowColumnFor( + ( + + ) || '', + )} + {tableRowColumnFor(testCaseIcon)} + + ); + } + renderTestCases(testCases, testCaseType, warn) { const { collapsible, @@ -233,56 +283,6 @@ export class VisibleTestCaseView extends Component { ); } - renderTestCaseRow(testCase) { - const { - testCases: { canReadTests }, - } = this.props; - const { showPublicTestCasesOutput } = this.props; - - let testCaseResult = 'unattempted'; - let testCaseIcon; - if (testCase.passed !== undefined) { - testCaseResult = testCase.passed ? 'correct' : 'wrong'; - testCaseIcon = testCase.passed ? : ; - } - - const tableRowColumnFor = (field) => ( - {field} - ); - - const outputStyle = { whiteSpace: 'pre-wrap', fontFamily: 'monospace' }; - - return ( - - {canReadTests && tableRowColumnFor(testCase.identifier)} - {tableRowColumnFor( - , - )} - {tableRowColumnFor( - ( - - ) || '', - )} - {(canReadTests || showPublicTestCasesOutput) && - tableRowColumnFor( - ( - - ) || '', - )} - {tableRowColumnFor(testCaseIcon)} - - ); - } - render() { const { submissionState, diff --git a/client/app/bundles/course/assessment/submission/containers/UploadedFileView.jsx b/client/app/bundles/course/assessment/submission/containers/UploadedFileView.jsx index d3a058c1067..f3bb34d30d3 100644 --- a/client/app/bundles/course/assessment/submission/containers/UploadedFileView.jsx +++ b/client/app/bundles/course/assessment/submission/containers/UploadedFileView.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { intlShape, injectIntl, defineMessages } from 'react-intl'; diff --git a/client/app/bundles/course/assessment/submission/containers/VoiceResponseAnswer.jsx b/client/app/bundles/course/assessment/submission/containers/VoiceResponseAnswer.jsx index 0a84866651e..ba2c8678991 100644 --- a/client/app/bundles/course/assessment/submission/containers/VoiceResponseAnswer.jsx +++ b/client/app/bundles/course/assessment/submission/containers/VoiceResponseAnswer.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; @@ -13,8 +13,8 @@ import FlatButton from 'material-ui/FlatButton'; import MicIcon from 'material-ui/svg-icons/av/mic'; import StopIcon from 'material-ui/svg-icons/av/stop'; import SingleFileInput from 'lib/components/redux-form/SingleFileInput'; +import sharedConstants from 'lib/constants/sharedConstants'; import recorderHelper from '../../utils/recorderHelper'; -import sharedConstants from '../../../../../lib/constants/sharedConstants'; import { setRecording, setNotRecording, @@ -100,17 +100,6 @@ class VoiceResponseAnswer extends Component { return `voice_response_${question.id}`; }; - renderSingleFileInputChildren = (props) => ( -
-
-
- -
- {props.file && props.file.name} -
-
- ); - renderAudio = (field) => { const { input: { value }, @@ -192,6 +181,17 @@ class VoiceResponseAnswer extends Component { ); }; + renderSingleFileInputChildren = (props) => ( +
+
+
+ +
+ {props.file && props.file.name} +
+
+ ); + render() { const { question, recording, recordingComponentId, readOnly, answerId } = this.props; diff --git a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditForm.jsx b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditForm.jsx index 6ab9aa14220..c4dfffef3da 100644 --- a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditForm.jsx +++ b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditForm.jsx @@ -1,4 +1,4 @@ -import React, { Component, Suspense } from 'react'; +import { Component, Suspense, lazy } from 'react'; import PropTypes from 'prop-types'; import { reduxForm } from 'redux-form'; import { Prompt } from 'react-router-dom'; @@ -38,7 +38,7 @@ import { formNames, questionTypes } from '../../constants'; import translations from '../../translations'; import submissionFormValidate from './submissionFormValidate'; -const Comments = React.lazy(() => +const Comments = lazy(() => import(/* webpackChunkName: "comment" */ '../../containers/Comments'), ); @@ -104,12 +104,129 @@ class SubmissionEditForm extends Component { return null; }; - renderQuestionGrading(id) { - const { attempting, published, graderView } = this.props; - const editable = !attempting && graderView; - const visible = editable || published; + renderAutogradeSubmissionButton() { + const { + intl, + graderView, + submitted, + handleAutogradeSubmission, + isAutograding, + isSaving, + } = this.props; + if (graderView && submitted) { + const progressIcon = ; - return visible ? : null; + return ( + + ); + } + return null; + } + + renderExamDialog() { + const { intl } = this.props; + + return ( + this.setState({ examNotice: false })} + /> + } + modal + open={this.state.examNotice} + > + {intl.formatMessage(translations.examDialogMessage)} + + ); + } + + renderExplanationPanel(questionId) { + const { intl, explanations, attempting } = this.props; + const explanation = explanations[questionId]; + + if (explanation && explanation.correct === false && attempting) { + let title = ''; + if (explanation.failureType === 'public_test') { + title = intl.formatMessage(translations.publicTestCaseFailure); + } else if (explanation.failureType === 'private_test') { + title = intl.formatMessage(translations.privateTestCaseFailure); + } else { + return null; + } + + return ( + + + {explanation.explanations.every( + (exp) => exp.trim().length === 0, + ) ? null : ( + + {explanation.explanations.map((exp, index) => { + const key = `question-${questionId}-explanation-${index}`; + return ( +
+ ); + })} + + )} + + ); + } + return null; + } + + renderGradingPanel() { + const { attempting } = this.props; + if (!attempting) { + return ; + } + return null; + } + + renderMarkButton() { + const { + intl, + delayedGradePublication, + grading, + graderView, + submitted, + handleMark, + isSaving, + } = this.props; + if (delayedGradePublication && graderView && submitted) { + const anyUngraded = Object.values(grading).some( + (q) => q.grade === undefined || q.grade === null, + ); + return ( + + ); + } + return null; } renderProgrammingQuestionActions(id) { @@ -181,121 +298,41 @@ class SubmissionEditForm extends Component { return null; } - renderExplanationPanel(questionId) { - const { intl, explanations, attempting } = this.props; - const explanation = explanations[questionId]; - - if (explanation && explanation.correct === false && attempting) { - let title = ''; - if (explanation.failureType === 'public_test') { - title = intl.formatMessage(translations.publicTestCaseFailure); - } else if (explanation.failureType === 'private_test') { - title = intl.formatMessage(translations.privateTestCaseFailure); - } else { - return null; - } + renderPublishButton() { + const { + intl, + delayedGradePublication, + graderView, + grading, + submitted, + handlePublish, + isSaving, + } = this.props; + if (!delayedGradePublication && graderView && submitted) { + const anyUngraded = Object.values(grading).some( + (q) => q.grade === undefined || q.grade === null, + ); return ( - - - {explanation.explanations.every( - (exp) => exp.trim().length === 0, - ) ? null : ( - - {explanation.explanations.map((exp, index) => { - const key = `question-${questionId}-explanation-${index}`; - return ( -
- ); - })} - - )} - + ); } return null; } - renderTabbedQuestions() { - const { - intl, - attempting, - questionIds, - questions, - questionsFlags, - historyQuestions, - topics, - step, - graderView, - showMcqMrqSolution, - handleToggleViewHistoryMode, - } = this.props; - - let initialStep = step || 0; - initialStep = initialStep < 0 ? 0 : initialStep; - initialStep = - initialStep >= questionIds.length - 1 - ? questionIds.length - 1 - : initialStep; + renderQuestionGrading(id) { + const { attempting, published, graderView } = this.props; + const editable = !attempting && graderView; + const visible = editable || published; - return ( - - {questionIds.map((id, index) => { - const question = questions[id]; - const { answerId, topicId, viewHistory } = question; - const topic = topics[topicId]; - return ( - - - {question.type === questionTypes.Programming && !viewHistory - ? this.renderExplanationPanel(id) - : null} - {viewHistory ? null : this.renderQuestionGrading(id)} - {viewHistory ? null : this.renderProgrammingQuestionActions(id)} - -
-
{intl.formatMessage(translations.loadingComment)}
- - } - > - -
-
-
- ); - })} -
- ); + return visible ? : null; } renderQuestions() { @@ -358,12 +395,22 @@ class SubmissionEditForm extends Component { ); } - renderGradingPanel() { - const { attempting } = this.props; - if (!attempting) { - return ; - } - return null; + renderResetDialog() { + const { resetConfirmation, resetAnswerId } = this.state; + const { intl, handleReset } = this.props; + return ( + + this.setState({ resetConfirmation: false, resetAnswerId: null }) + } + onConfirm={() => { + this.setState({ resetConfirmation: false, resetAnswerId: null }); + handleReset(resetAnswerId); + }} + message={intl.formatMessage(translations.resetConfirmation)} + /> + ); } renderSaveDraftButton() { @@ -400,32 +447,6 @@ class SubmissionEditForm extends Component { return null; } - renderAutogradeSubmissionButton() { - const { - intl, - graderView, - submitted, - handleAutogradeSubmission, - isAutograding, - isSaving, - } = this.props; - if (graderView && submitted) { - const progressIcon = ; - - return ( - - ); - } - return null; - } - renderSubmitButton() { const { intl, canUpdate, attempting, isSaving } = this.props; if (attempting && canUpdate) { @@ -442,49 +463,95 @@ class SubmissionEditForm extends Component { return null; } - renderUnsubmitButton() { - const { intl, graderView, submitted, published, isSaving } = this.props; - if (graderView && (submitted || published)) { - return ( - this.setState({ unsubmitConfirmation: true })} - disabled={isSaving} - /> - ); - } - return null; + renderSubmitDialog() { + const { submitConfirmation } = this.state; + const { intl, handleSubmit } = this.props; + return ( + this.setState({ submitConfirmation: false })} + onConfirm={() => { + this.setState({ submitConfirmation: false }); + handleSubmit(); + }} + message={intl.formatMessage(translations.submitConfirmation)} + /> + ); } - renderMarkButton() { + renderTabbedQuestions() { const { intl, - delayedGradePublication, - grading, + attempting, + questionIds, + questions, + questionsFlags, + historyQuestions, + topics, + step, graderView, - submitted, - handleMark, - isSaving, + showMcqMrqSolution, + handleToggleViewHistoryMode, } = this.props; - if (delayedGradePublication && graderView && submitted) { - const anyUngraded = Object.values(grading).some( - (q) => q.grade === undefined || q.grade === null, - ); - return ( - - ); - } - return null; + + let initialStep = step || 0; + initialStep = initialStep < 0 ? 0 : initialStep; + initialStep = + initialStep >= questionIds.length - 1 + ? questionIds.length - 1 + : initialStep; + + return ( + + {questionIds.map((id, index) => { + const question = questions[id]; + const { answerId, topicId, viewHistory } = question; + const topic = topics[topicId]; + return ( + + + {question.type === questionTypes.Programming && !viewHistory + ? this.renderExplanationPanel(id) + : null} + {viewHistory ? null : this.renderQuestionGrading(id)} + {viewHistory ? null : this.renderProgrammingQuestionActions(id)} + +
+
{intl.formatMessage(translations.loadingComment)}
+ + } + > + +
+
+
+ ); + })} +
+ ); } renderUnmarkButton() { @@ -504,51 +571,23 @@ class SubmissionEditForm extends Component { return null; } - renderPublishButton() { - const { - intl, - delayedGradePublication, - graderView, - grading, - submitted, - handlePublish, - isSaving, - } = this.props; - if (!delayedGradePublication && graderView && submitted) { - const anyUngraded = Object.values(grading).some( - (q) => q.grade === undefined || q.grade === null, - ); - + renderUnsubmitButton() { + const { intl, graderView, submitted, published, isSaving } = this.props; + if (graderView && (submitted || published)) { return ( this.setState({ unsubmitConfirmation: true })} + disabled={isSaving} /> ); } return null; } - renderSubmitDialog() { - const { submitConfirmation } = this.state; - const { intl, handleSubmit } = this.props; - return ( - this.setState({ submitConfirmation: false })} - onConfirm={() => { - this.setState({ submitConfirmation: false }); - handleSubmit(); - }} - message={intl.formatMessage(translations.submitConfirmation)} - /> - ); - } - renderUnsubmitDialog() { const { unsubmitConfirmation } = this.state; const { intl, handleUnsubmit } = this.props; @@ -565,45 +604,6 @@ class SubmissionEditForm extends Component { ); } - renderResetDialog() { - const { resetConfirmation, resetAnswerId } = this.state; - const { intl, handleReset } = this.props; - return ( - - this.setState({ resetConfirmation: false, resetAnswerId: null }) - } - onConfirm={() => { - this.setState({ resetConfirmation: false, resetAnswerId: null }); - handleReset(resetAnswerId); - }} - message={intl.formatMessage(translations.resetConfirmation)} - /> - ); - } - - renderExamDialog() { - const { intl } = this.props; - - return ( - this.setState({ examNotice: false })} - /> - } - modal - open={this.state.examNotice} - > - {intl.formatMessage(translations.examDialogMessage)} - - ); - } - renderNavigateAwayWarning() { const isDirty = !this.props.pristine; return ( diff --git a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditStepForm.jsx b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditStepForm.jsx index 21d4513ed85..5536009a7f5 100644 --- a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditStepForm.jsx +++ b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEditStepForm.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { reduxForm } from 'redux-form'; import { Prompt } from 'react-router-dom'; @@ -135,12 +135,6 @@ class SubmissionEditStepForm extends Component { }); }; - shouldRenderContinueButton() { - const { stepIndex } = this.state; - const { questionIds } = this.props; - return !SubmissionEditStepForm.isLastQuestion(questionIds, stepIndex); - } - shouldDisableContinueButton() { const { stepIndex } = this.state; const { explanations, questionIds, isSaving, showMcqAnswer } = this.props; @@ -157,18 +151,55 @@ class SubmissionEditStepForm extends Component { return showMcqAnswer; } - renderQuestionGrading(id) { - const { attempting, published, graderView } = this.props; - const editable = !attempting && graderView; - const visible = editable || published; + shouldRenderContinueButton() { + const { stepIndex } = this.state; + const { questionIds } = this.props; + return !SubmissionEditStepForm.isLastQuestion(questionIds, stepIndex); + } - return visible ? : null; + renderAnswerLoadingIndicator() { + const { stepIndex } = this.state; + const { questionIds, questionsFlags } = this.props; + const id = questionIds[stepIndex]; + const { isAutograding, isResetting } = questionsFlags[id] || {}; + + if (isAutograding || isResetting) { + return ; + } + return null; } - renderGradingPanel() { - const { attempting } = this.props; - if (!attempting) { - return ; + renderAutogradingErrorPanel(id) { + const { intl, questionsFlags, questions } = this.props; + const { jobError } = questionsFlags[id] || {}; + const { type } = questions[id]; + + if (type === questionTypes.Programming && jobError) { + return ( + + {intl.formatMessage(translations.autogradeFailure)} + + ); + } + + return null; + } + + renderContinueButton() { + const { intl } = this.props; + if (this.shouldRenderContinueButton()) { + return ( + this.handleNext()} + disabled={this.shouldDisableContinueButton()} + /> + ); } return null; } @@ -224,24 +255,44 @@ class SubmissionEditStepForm extends Component { return null; } - renderAutogradingErrorPanel(id) { - const { intl, questionsFlags, questions } = this.props; - const { jobError } = questionsFlags[id] || {}; - const { type } = questions[id]; - - if (type === questionTypes.Programming && jobError) { + renderFinaliseButton() { + const { + intl, + attempting, + allConsideredCorrect, + isSaving, + allowPartialSubmission, + } = this.props; + if (attempting && (allowPartialSubmission || allConsideredCorrect)) { return ( - - {intl.formatMessage(translations.autogradeFailure)} - + this.setState({ submitConfirmation: true })} + disabled={isSaving} + /> ); } + return null; + } + renderGradingPanel() { + const { attempting } = this.props; + if (!attempting) { + return ; + } return null; } + renderQuestionGrading(id) { + const { attempting, published, graderView } = this.props; + const editable = !attempting && graderView; + const visible = editable || published; + + return visible ? : null; + } + renderResetButton() { const { stepIndex } = this.state; const { intl, questionIds, questions, questionsFlags, isSaving } = @@ -267,86 +318,24 @@ class SubmissionEditStepForm extends Component { return null; } - renderSubmitButton() { - const { stepIndex } = this.state; - const { - intl, - questionIds, - questions, - questionsFlags, - handleSubmitAnswer, - isSaving, - showMcqAnswer, - } = this.props; - const id = questionIds[stepIndex]; - const question = questions[id]; - const { answerId } = question; - const { isAutograding, isResetting } = questionsFlags[id] || {}; - if ( - [questionTypes.MultipleChoice, questionTypes.MultipleResponse].includes( - question.type, - ) && - question.autogradable && - !showMcqAnswer - ) { - return null; - } + renderResetDialog() { + const { resetConfirmation, resetAnswerId } = this.state; + const { intl, handleReset } = this.props; return ( - <> - handleSubmitAnswer(answerId)} - disabled={isAutograding || isResetting || isSaving} - filter={() => true} - /> - handleSubmitAnswer(answerId)} - disabled={isAutograding || isResetting || isSaving} - onMouseEnter={() => this.onMouseEnter('SUBMIT')} - onMouseLeave={this.onMouseLeave} - > - - - + + this.setState({ resetConfirmation: false, resetAnswerId: null }) + } + onConfirm={() => { + this.setState({ resetConfirmation: false, resetAnswerId: null }); + handleReset(resetAnswerId); + }} + message={intl.formatMessage(translations.resetConfirmation)} + /> ); } - renderContinueButton() { - const { intl } = this.props; - if (this.shouldRenderContinueButton()) { - return ( - this.handleNext()} - disabled={this.shouldDisableContinueButton()} - /> - ); - } - return null; - } - - renderAnswerLoadingIndicator() { - const { stepIndex } = this.state; - const { questionIds, questionsFlags } = this.props; - const id = questionIds[stepIndex]; - const { isAutograding, isResetting } = questionsFlags[id] || {}; - - if (isAutograding || isResetting) { - return ; - } - return null; - } - renderSaveDraftButton() { const { intl, pristine, attempting, handleSaveDraft, isSaving } = this.props; @@ -379,44 +368,6 @@ class SubmissionEditStepForm extends Component { return null; } - renderFinaliseButton() { - const { - intl, - attempting, - allConsideredCorrect, - isSaving, - allowPartialSubmission, - } = this.props; - if (attempting && (allowPartialSubmission || allConsideredCorrect)) { - return ( - this.setState({ submitConfirmation: true })} - disabled={isSaving} - /> - ); - } - return null; - } - - renderUnsubmitButton() { - const { intl, graderView, attempting } = this.props; - if (graderView && !attempting) { - return ( - this.setState({ unsubmitConfirmation: true })} - /> - ); - } - return null; - } - renderStepQuestion() { const { stepIndex } = this.state; const { @@ -535,6 +486,57 @@ class SubmissionEditStepForm extends Component { ); } + renderSubmitButton() { + const { stepIndex } = this.state; + const { + intl, + questionIds, + questions, + questionsFlags, + handleSubmitAnswer, + isSaving, + showMcqAnswer, + } = this.props; + const id = questionIds[stepIndex]; + const question = questions[id]; + const { answerId } = question; + const { isAutograding, isResetting } = questionsFlags[id] || {}; + if ( + [questionTypes.MultipleChoice, questionTypes.MultipleResponse].includes( + question.type, + ) && + question.autogradable && + !showMcqAnswer + ) { + return null; + } + return ( + <> + handleSubmitAnswer(answerId)} + disabled={isAutograding || isResetting || isSaving} + filter={() => true} + /> + handleSubmitAnswer(answerId)} + disabled={isAutograding || isResetting || isSaving} + onMouseEnter={() => this.onMouseEnter('SUBMIT')} + onMouseLeave={this.onMouseLeave} + > + + + + ); + } + renderSubmitDialog() { const { submitConfirmation } = this.state; const { intl, handleSubmit } = this.props; @@ -551,6 +553,22 @@ class SubmissionEditStepForm extends Component { ); } + renderUnsubmitButton() { + const { intl, graderView, attempting } = this.props; + if (graderView && !attempting) { + return ( + this.setState({ unsubmitConfirmation: true })} + /> + ); + } + return null; + } + renderUnsubmitDialog() { const { unsubmitConfirmation } = this.state; const { intl, handleUnsubmit } = this.props; @@ -567,24 +585,6 @@ class SubmissionEditStepForm extends Component { ); } - renderResetDialog() { - const { resetConfirmation, resetAnswerId } = this.state; - const { intl, handleReset } = this.props; - return ( - - this.setState({ resetConfirmation: false, resetAnswerId: null }) - } - onConfirm={() => { - this.setState({ resetConfirmation: false, resetAnswerId: null }); - handleReset(resetAnswerId); - }} - message={intl.formatMessage(translations.resetConfirmation)} - /> - ); - } - renderNavigateAwayWarning() { const isDirty = !this.props.pristine; return ( @@ -626,12 +626,11 @@ SubmissionEditStepForm.propTypes = { attempting: PropTypes.bool.isRequired, published: PropTypes.bool.isRequired, - showMcqMrqSolution: PropTypes.bool.isRequired, - explanations: PropTypes.objectOf(explanationShape), allConsideredCorrect: PropTypes.bool.isRequired, allowPartialSubmission: PropTypes.bool.isRequired, showMcqAnswer: PropTypes.bool.isRequired, + showMcqMrqSolution: PropTypes.bool.isRequired, questionIds: PropTypes.arrayOf(PropTypes.number), questions: PropTypes.objectOf(questionShape), historyQuestions: PropTypes.objectOf(historyQuestionShape), diff --git a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEmptyForm.jsx b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEmptyForm.jsx index c5addf2c02a..aaf907bdf1f 100644 --- a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEmptyForm.jsx +++ b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/SubmissionEmptyForm.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { reduxForm } from 'redux-form'; import { injectIntl, intlShape, FormattedMessage } from 'react-intl'; diff --git a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/__test__/index.test.js b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/__test__/index.test.js index 998620ac1f2..f6a1ef69347 100644 --- a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/__test__/index.test.js +++ b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import 'ace-builds'; import { mount } from 'enzyme'; import ProviderWrapper from 'lib/components/ProviderWrapper'; @@ -31,6 +30,8 @@ const errorSubmission = { graderView: true, autograded: true, allowPartialSubmission: false, + showMcqAnswer: false, + showMcqMrqSolution: false, files: [], questionIds: [1], skippable: true, @@ -100,6 +101,8 @@ const successSubmission = { graderView: true, autograded: true, allowPartialSubmission: false, + showMcqAnswer: false, + showMcqMrqSolution: false, files: [], questionIds: [1], skippable: true, @@ -176,9 +179,9 @@ describe('SubmissionEditIndex', () => { ); const syncErrors = store.getState().form[formNames.SUBMISSION].syncErrors; - expect( - Object.keys((syncErrors || {})[answerId] || {}).length !== 0, - ).toEqual(true); + expect(Object.keys((syncErrors || {})[answerId] || {}).length !== 0).toBe( + true, + ); }); it('render submission without errors', async () => { @@ -202,7 +205,7 @@ describe('SubmissionEditIndex', () => { ); const syncErrors = store.getState().form[formNames.SUBMISSION].syncErrors; - expect(Object.keys((syncErrors || {}).answerId || {}).length === 0).toEqual( + expect(Object.keys((syncErrors || {}).answerId || {}).length === 0).toBe( true, ); }); diff --git a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/index.jsx b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/index.jsx index d6ad751506a..a03db8a30a7 100644 --- a/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/index.jsx +++ b/client/app/bundles/course/assessment/submission/pages/SubmissionEditIndex/index.jsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -64,8 +64,6 @@ class VisibleSubmissionEditIndex extends Component { : parseInt(stepString, 10) - 1; this.state = { newSubmission, step }; - this.handleToggleViewHistoryMode = - this.handleToggleViewHistoryMode.bind(this); } componentDidMount() { @@ -164,7 +162,11 @@ class VisibleSubmissionEditIndex extends Component { ); } - handleToggleViewHistoryMode(viewHistory, submissionQuestionId, questionId) { + handleToggleViewHistoryMode = ( + viewHistory, + submissionQuestionId, + questionId, + ) => { const { dispatch, historyQuestions } = this.props; const answersLoaded = historyQuestions[questionId].pastAnswersLoaded; dispatch( @@ -175,7 +177,7 @@ class VisibleSubmissionEditIndex extends Component { answersLoaded, ), ); - } + }; handleUnmark() { const { @@ -256,22 +258,6 @@ class VisibleSubmissionEditIndex extends Component { return numIncorrect === 0; } - renderStudentViewToggle() { - return ( - } - labelPosition="right" - onToggle={(_, enabled) => { - if (enabled) { - this.props.dispatch(enterStudentView()); - } else { - this.props.dispatch(exitStudentView()); - } - }} - /> - ); - } - renderAssessment() { const { assessment, submission } = this.props; @@ -305,14 +291,6 @@ class VisibleSubmissionEditIndex extends Component { ); } - renderProgress() { - const { submission } = this.props; - if (submission.graderView) { - return ; - } - return null; - } - renderContent() { const { newSubmission, step } = this.state; const { @@ -435,6 +413,30 @@ class VisibleSubmissionEditIndex extends Component { ); } + renderProgress() { + const { submission } = this.props; + if (submission.graderView) { + return ; + } + return null; + } + + renderStudentViewToggle() { + return ( + } + labelPosition="right" + onToggle={(_, enabled) => { + if (enabled) { + this.props.dispatch(enterStudentView()); + } else { + this.props.dispatch(exitStudentView()); + } + }} + /> + ); + } + render() { const { isLoading, notification } = this.props; diff --git a/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTable.jsx b/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTable.jsx index 50f8209aee9..240188a6c8d 100644 --- a/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTable.jsx +++ b/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTable.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import ReactTooltip from 'react-tooltip'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; @@ -42,7 +42,7 @@ const styles = { }, }; -export default class SubmissionsTable extends React.Component { +export default class SubmissionsTable extends Component { constructor(props) { super(props); this.state = { @@ -63,6 +63,13 @@ export default class SubmissionsTable extends React.Component { ); }; + canDeleteAll() { + const { submissions } = this.props; + return submissions.some( + (s) => s.workflowState !== workflowStates.Unstarted, + ); + } + canDownloadAnswers(downloadFormat) { const { assessment, submissions } = this.props; const downloadable = @@ -88,91 +95,6 @@ export default class SubmissionsTable extends React.Component { ); } - canDeleteAll() { - const { submissions } = this.props; - return submissions.some( - (s) => s.workflowState !== workflowStates.Unstarted, - ); - } - - renderRowUsers() { - const { - dispatch, - courseId, - assessmentId, - submissions, - assessment, - isDownloadingFiles, - isDownloadingCsv, - isStatisticsDownloading, - isUnsubmitting, - isDeleting, - } = this.props; - - const props = { - dispatch, - courseId, - assessmentId, - assessment, - isDownloadingFiles, - isDownloadingCsv, - isStatisticsDownloading, - isUnsubmitting, - isDeleting, - }; - - return submissions.map((submission) => ( - - )); - } - - renderRowTooltips = () => { - const tooltipIds = [ - 'phantom-user', - 'unpublished-grades', - 'access-logs', - 'unsubmit-button', - 'delete-button', - ]; - const formattedMessages = [ - submissionsTranslations.phantom, - submissionsTranslations.publishNotice, - submissionsTranslations.accessLogs, - submissionsTranslations.unsubmitSubmission, - submissionsTranslations.deleteSubmission, - ]; - return tooltipIds.map((tooltipId, index) => ( - - - - )); - }; - - renderUnsubmitAllConfirmation() { - const { handleUnsubmitAll, confirmDialogValue } = this.props; - const { unsubmitAllConfirmation } = this.state; - return ( - this.setState({ unsubmitAllConfirmation: false })} - onConfirm={() => { - this.setState({ unsubmitAllConfirmation: false }); - handleUnsubmitAll(); - }} - message={ - - } - /> - ); - } - renderDeleteAllConfirmation() { const { handleDeleteAll, confirmDialogValue } = this.props; const { deleteAllConfirmation } = this.state; @@ -334,6 +256,84 @@ export default class SubmissionsTable extends React.Component { ); } + renderRowTooltips = () => { + const tooltipIds = [ + 'phantom-user', + 'unpublished-grades', + 'access-logs', + 'unsubmit-button', + 'delete-button', + ]; + const formattedMessages = [ + submissionsTranslations.phantom, + submissionsTranslations.publishNotice, + submissionsTranslations.accessLogs, + submissionsTranslations.unsubmitSubmission, + submissionsTranslations.deleteSubmission, + ]; + return tooltipIds.map((tooltipId, index) => ( + + + + )); + }; + + renderRowUsers() { + const { + dispatch, + courseId, + assessmentId, + submissions, + assessment, + isDownloadingFiles, + isDownloadingCsv, + isStatisticsDownloading, + isUnsubmitting, + isDeleting, + } = this.props; + + const props = { + dispatch, + courseId, + assessmentId, + assessment, + isDownloadingFiles, + isDownloadingCsv, + isStatisticsDownloading, + isUnsubmitting, + isDeleting, + }; + + return submissions.map((submission) => ( + + )); + } + + renderUnsubmitAllConfirmation() { + const { handleUnsubmitAll, confirmDialogValue } = this.props; + const { unsubmitAllConfirmation } = this.state; + return ( + this.setState({ unsubmitAllConfirmation: false })} + onConfirm={() => { + this.setState({ unsubmitAllConfirmation: false }); + handleUnsubmitAll(); + }} + message={ + + } + /> + ); + } + render() { const { assessment } = this.props; diff --git a/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTableRow.jsx b/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTableRow.jsx index a4886dfc94f..80877e259cf 100644 --- a/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTableRow.jsx +++ b/client/app/bundles/course/assessment/submission/pages/SubmissionsIndex/SubmissionsTableRow.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import moment from 'lib/moment'; @@ -56,11 +56,31 @@ const styles = { }, }; -export default class SubmissionsTableRow extends React.Component { +export default class SubmissionsTableRow extends Component { static formatDate(date) { return date ? moment(date).format('DD MMM HH:mm') : null; } + static formatGrade(grade) { + return grade !== null ? grade.toFixed(1) : null; + } + + static renderPhantomUserIcon(submission) { + if (submission.courseUser.phantom) { + return ( + <> + + + ); + } + return null; + } + static renderUnpublishedWarning(submission) { if (submission.workflowState !== workflowStates.Graded) return null; return ( @@ -72,10 +92,6 @@ export default class SubmissionsTableRow extends React.Component { ); } - static formatGrade(grade) { - return grade !== null ? grade.toFixed(1) : null; - } - constructor(props) { super(props); this.state = { @@ -115,22 +131,6 @@ export default class SubmissionsTableRow extends React.Component { return `${gradeString} / ${maximumGradeString}`; } - renderPhantomUserIcon = (submission) => { - if (submission.courseUser.phantom) { - return ( - <> - - - ); - } - return null; - }; - disableButtons() { const { isDownloadingFiles, @@ -148,24 +148,55 @@ export default class SubmissionsTableRow extends React.Component { ); } - renderSubmissionWorkflowState(submission) { - const { courseId, assessmentId } = this.props; + renderDeleteButton(submission) { + const { assessment } = this.props; + const disabled = + this.disableButtons() || + submission.workflowState === workflowStates.Unstarted; + if ( + !assessment.canDeleteAllSubmissions && + !submission.courseUser.isCurrentUser + ) + return null; - if (submission.workflowState === workflowStates.Unstarted) { - return ( -
- -
- ); - } + return ( + + this.setState({ deleteConfirmation: true })} + disabled={disabled} + > + + + + ); + } + renderDeleteDialog(submission) { + const { deleteConfirmation } = this.state; + const { dispatch } = this.props; + const values = { name: submission.courseUser.name }; + const successMessage = ( + + ); return ( - <> - {SubmissionsTableRow.renderUnpublishedWarning(submission)} - - - - + this.setState({ deleteConfirmation: false })} + onConfirm={() => { + dispatch(deleteSubmission(submission.id, successMessage)); + this.setState({ deleteConfirmation: false }); + }} + message={ + + } + /> ); } @@ -190,6 +221,27 @@ export default class SubmissionsTableRow extends React.Component { ); } + renderSubmissionWorkflowState(submission) { + const { courseId, assessmentId } = this.props; + + if (submission.workflowState === workflowStates.Unstarted) { + return ( +
+ +
+ ); + } + + return ( + <> + {SubmissionsTableRow.renderUnpublishedWarning(submission)} + + + + + ); + } + renderUnsubmitButton(submission) { const { assessment } = this.props; @@ -242,58 +294,6 @@ export default class SubmissionsTableRow extends React.Component { ); } - renderDeleteButton(submission) { - const { assessment } = this.props; - const disabled = - this.disableButtons() || - submission.workflowState === workflowStates.Unstarted; - if ( - !assessment.canDeleteAllSubmissions && - !submission.courseUser.isCurrentUser - ) - return null; - - return ( - - this.setState({ deleteConfirmation: true })} - disabled={disabled} - > - - - - ); - } - - renderDeleteDialog(submission) { - const { deleteConfirmation } = this.state; - const { dispatch } = this.props; - const values = { name: submission.courseUser.name }; - const successMessage = ( - - ); - return ( - this.setState({ deleteConfirmation: false })} - onConfirm={() => { - dispatch(deleteSubmission(submission.id, successMessage)); - this.setState({ deleteConfirmation: false }); - }} - message={ - - } - /> - ); - } - renderUser(submission) { const { courseId, assessment } = this.props; const { unsubmitConfirmation, deleteConfirmation } = this.state; @@ -304,7 +304,7 @@ export default class SubmissionsTableRow extends React.Component { return ( - {this.renderPhantomUserIcon(submission)} + {SubmissionsTableRow.renderPhantomUserIcon(submission)} s.workflowState === workflowStates.Graded, - ); - } - +class VisibleSubmissionsIndex extends Component { static canForceSubmitOrRemind(shownSubmissions) { return shownSubmissions.some( (s) => @@ -76,6 +70,12 @@ class VisibleSubmissionsIndex extends React.Component { ); } + static canPublish(shownSubmissions) { + return shownSubmissions.some( + (s) => s.workflowState === workflowStates.Graded, + ); + } + constructor(props) { super(props); this.state = { @@ -105,48 +105,32 @@ class VisibleSubmissionsIndex extends React.Component { } } - renderHistogram(submissionHistogram) { - const { includePhantoms } = this.state; - const workflowStatesArray = Object.values(workflowStates); - - const initialCounts = workflowStatesArray.reduce( - (counts, w) => ({ ...counts, [w]: 0 }), - {}, - ); - const submissionStateCounts = submissionHistogram.reduce( - (counts, submission) => { - if (includePhantoms || !submission.courseUser.phantom) { - return { - ...counts, - [submission.workflowState]: counts[submission.workflowState] + 1, - }; - } - return counts; - }, - initialCounts, - ); + renderForceSubmitConfirmation(shownSubmissions, handleForceSubmitParams) { + const { dispatch, assessment } = this.props; + const { forceSubmitConfirmation } = this.state; + const values = { + unattempted: shownSubmissions.filter( + (s) => s.workflowState === workflowStates.Unstarted, + ).length, + attempting: shownSubmissions.filter( + (s) => s.workflowState === workflowStates.Attempting, + ).length, + selectedUsers: selectedUserTypeDisplay[handleForceSubmitParams], + }; + const message = assessment.autograded + ? translations.forceSubmitConfirmationAutograded + : translations.forceSubmitConfirmation; return ( -
- {workflowStatesArray.map((w) => { - const count = submissionStateCounts[w]; - const cellStyle = { - ...styles.histogramCells.common, - ...styles.histogramCells[w], - flex: count, - minWidth: count > 0 ? 50 : 0, - }; - - return ( -
- {count > 0 ? count : null} - - - -
- ); - })} -
+ this.setState({ forceSubmitConfirmation: false })} + onConfirm={() => { + dispatch(forceSubmitSubmissions(handleForceSubmitParams)); + this.setState({ forceSubmitConfirmation: false }); + }} + message={} + /> ); } @@ -238,6 +222,114 @@ class VisibleSubmissionsIndex extends React.Component { ); } + renderHistogram(submissionHistogram) { + const { includePhantoms } = this.state; + const workflowStatesArray = Object.values(workflowStates); + + const initialCounts = workflowStatesArray.reduce( + (counts, w) => ({ ...counts, [w]: 0 }), + {}, + ); + const submissionStateCounts = submissionHistogram.reduce( + (counts, submission) => { + if (includePhantoms || !submission.courseUser.phantom) { + return { + ...counts, + [submission.workflowState]: counts[submission.workflowState] + 1, + }; + } + return counts; + }, + initialCounts, + ); + + return ( +
+ {workflowStatesArray.map((w) => { + const count = submissionStateCounts[w]; + const cellStyle = { + ...styles.histogramCells.common, + ...styles.histogramCells[w], + flex: count, + minWidth: count > 0 ? 50 : 0, + }; + + return ( +
+ {count > 0 ? count : null} + + + +
+ ); + })} +
+ ); + } + + renderPublishConfirmation(shownSubmissions, handlePublishParams) { + const { dispatch } = this.props; + const { publishConfirmation } = this.state; + + const values = { + graded: shownSubmissions.filter( + (s) => s.workflowState === workflowStates.Graded, + ).length, + selectedUsers: selectedUserTypeDisplay[handlePublishParams], + }; + + return ( + this.setState({ publishConfirmation: false })} + onConfirm={() => { + dispatch(publishSubmissions(handlePublishParams)); + this.setState({ publishConfirmation: false }); + }} + message={ + + } + /> + ); + } + + renderReminderConfirmation(shownSubmissions, handleRemindParams) { + const { dispatch } = this.props; + const { assessmentId } = this.props.match.params; + const { remindConfirmation } = this.state; + const values = { + unattempted: shownSubmissions.filter( + (s) => s.workflowState === workflowStates.Unstarted, + ).length, + attempting: shownSubmissions.filter( + (s) => s.workflowState === workflowStates.Attempting, + ).length, + selectedUsers: selectedUserTypeDisplay[handleRemindParams], + }; + + return ( + this.setState({ remindConfirmation: false })} + onConfirm={() => { + dispatch( + sendAssessmentReminderEmail(assessmentId, handleRemindParams), + ); + this.setState({ remindConfirmation: false }); + }} + message={ + + } + /> + ); + } + renderTabs(filteredSubmissions, handleParams) { const { courseId, assessmentId } = this.props.match.params; const { @@ -370,98 +462,6 @@ class VisibleSubmissionsIndex extends React.Component { ); } - renderPublishConfirmation(shownSubmissions, handlePublishParams) { - const { dispatch } = this.props; - const { publishConfirmation } = this.state; - - const values = { - graded: shownSubmissions.filter( - (s) => s.workflowState === workflowStates.Graded, - ).length, - selectedUsers: selectedUserTypeDisplay[handlePublishParams], - }; - - return ( - this.setState({ publishConfirmation: false })} - onConfirm={() => { - dispatch(publishSubmissions(handlePublishParams)); - this.setState({ publishConfirmation: false }); - }} - message={ - - } - /> - ); - } - - renderForceSubmitConfirmation(shownSubmissions, handleForceSubmitParams) { - const { dispatch, assessment } = this.props; - const { forceSubmitConfirmation } = this.state; - const values = { - unattempted: shownSubmissions.filter( - (s) => s.workflowState === workflowStates.Unstarted, - ).length, - attempting: shownSubmissions.filter( - (s) => s.workflowState === workflowStates.Attempting, - ).length, - selectedUsers: selectedUserTypeDisplay[handleForceSubmitParams], - }; - const message = assessment.autograded - ? translations.forceSubmitConfirmationAutograded - : translations.forceSubmitConfirmation; - - return ( - this.setState({ forceSubmitConfirmation: false })} - onConfirm={() => { - dispatch(forceSubmitSubmissions(handleForceSubmitParams)); - this.setState({ forceSubmitConfirmation: false }); - }} - message={} - /> - ); - } - - renderReminderConfirmation(shownSubmissions, handleRemindParams) { - const { dispatch } = this.props; - const { assessmentId } = this.props.match.params; - const { remindConfirmation } = this.state; - const values = { - unattempted: shownSubmissions.filter( - (s) => s.workflowState === workflowStates.Unstarted, - ).length, - attempting: shownSubmissions.filter( - (s) => s.workflowState === workflowStates.Attempting, - ).length, - selectedUsers: selectedUserTypeDisplay[handleRemindParams], - }; - - return ( - this.setState({ remindConfirmation: false })} - onConfirm={() => { - dispatch( - sendAssessmentReminderEmail(assessmentId, handleRemindParams), - ); - this.setState({ remindConfirmation: false }); - }} - message={ - - } - /> - ); - } - render() { const { isLoading, notification, submissions } = this.props; const { diff --git a/client/app/bundles/course/assessment/submission/submission.jsx b/client/app/bundles/course/assessment/submission/submission.jsx index e86099740e8..6bd3213fb01 100644 --- a/client/app/bundles/course/assessment/submission/submission.jsx +++ b/client/app/bundles/course/assessment/submission/submission.jsx @@ -1,6 +1,5 @@ /* eslint-disable import/no-extraneous-dependencies, import/extensions, import/no-unresolved */ -import React from 'react'; import { render } from 'react-dom'; import { Router } from 'react-router'; import history from 'lib/history'; @@ -9,7 +8,7 @@ import ProviderWrapper from 'lib/components/ProviderWrapper'; import store from './store'; import SubmissionsLayout from './containers/SubmissionsLayout'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('course-assessment-submission'); if (mountNode) { diff --git a/client/app/bundles/course/assessment/submission/utils.js b/client/app/bundles/course/assessment/submission/utils.js index 78b8d62360f..4ecf412e48f 100644 --- a/client/app/bundles/course/assessment/submission/utils.js +++ b/client/app/bundles/course/assessment/submission/utils.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/extensions, import/no-extraneous-dependencies, import/no-unresolved import moment from 'lib/moment'; export function arrayToObjectById(array) { diff --git a/client/app/bundles/course/assessment/utils/__test__/index.test.js b/client/app/bundles/course/assessment/utils/__test__/index.test.js index 9ed9b4ec7ed..c2e318788aa 100644 --- a/client/app/bundles/course/assessment/utils/__test__/index.test.js +++ b/client/app/bundles/course/assessment/utils/__test__/index.test.js @@ -46,8 +46,8 @@ describe('categoryAndTabTitle', () => { const title1 = 'Foo'; const title2 = 'Bar'; - expect(categoryAndTabTitle(title1, title2, true)).toEqual(title1); - expect(categoryAndTabTitle(title1, title2, false)).toEqual( + expect(categoryAndTabTitle(title1, title2, true)).toBe(title1); + expect(categoryAndTabTitle(title1, title2, false)).toBe( `${title1} > ${title2}`, ); }); diff --git a/client/app/bundles/course/duplication/components/BulkSelectors.jsx b/client/app/bundles/course/duplication/components/BulkSelectors.jsx index 63f9f7bf530..864c011561b 100644 --- a/client/app/bundles/course/duplication/components/BulkSelectors.jsx +++ b/client/app/bundles/course/duplication/components/BulkSelectors.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; diff --git a/client/app/bundles/course/duplication/components/CourseDropdownMenu.jsx b/client/app/bundles/course/duplication/components/CourseDropdownMenu.jsx index 148875f651d..62518019630 100644 --- a/client/app/bundles/course/duplication/components/CourseDropdownMenu.jsx +++ b/client/app/bundles/course/duplication/components/CourseDropdownMenu.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import MenuItem from 'material-ui/MenuItem'; @@ -31,7 +31,7 @@ const translations = defineMessages({ }, }); -class CourseDropdownMenu extends React.PureComponent { +class CourseDropdownMenu extends PureComponent { renderCourseMenuItem = (course) => { const { currentHost } = this.props; const title = diff --git a/client/app/bundles/course/duplication/components/IndentedCheckbox.jsx b/client/app/bundles/course/duplication/components/IndentedCheckbox.jsx index fc8dd2bfb59..3a72e5601d9 100644 --- a/client/app/bundles/course/duplication/components/IndentedCheckbox.jsx +++ b/client/app/bundles/course/duplication/components/IndentedCheckbox.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import Checkbox from 'material-ui/Checkbox'; diff --git a/client/app/bundles/course/duplication/components/TypeBadge/index.jsx b/client/app/bundles/course/duplication/components/TypeBadge/index.jsx index dc216d06209..dec68748ab7 100644 --- a/client/app/bundles/course/duplication/components/TypeBadge/index.jsx +++ b/client/app/bundles/course/duplication/components/TypeBadge/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { duplicableItemTypes } from 'course/duplication/constants'; diff --git a/client/app/bundles/course/duplication/components/UnpublishedIcon.jsx b/client/app/bundles/course/duplication/components/UnpublishedIcon.jsx index d387844872a..bf46a586421 100644 --- a/client/app/bundles/course/duplication/components/UnpublishedIcon.jsx +++ b/client/app/bundles/course/duplication/components/UnpublishedIcon.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import Block from 'material-ui/svg-icons/content/block'; diff --git a/client/app/bundles/course/duplication/containers/DuplicationLayout/index.jsx b/client/app/bundles/course/duplication/containers/DuplicationLayout/index.jsx index 921574936da..85516a3ff40 100644 --- a/client/app/bundles/course/duplication/containers/DuplicationLayout/index.jsx +++ b/client/app/bundles/course/duplication/containers/DuplicationLayout/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Route, Switch } from 'react-router-dom'; import NotificationPopup from 'lib/containers/NotificationPopup'; import Duplication from 'course/duplication/pages/Duplication'; diff --git a/client/app/bundles/course/duplication/index.jsx b/client/app/bundles/course/duplication/index.jsx index 174438ef8a4..790b6a2f298 100644 --- a/client/app/bundles/course/duplication/index.jsx +++ b/client/app/bundles/course/duplication/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import { Router } from 'react-router-dom'; import history from 'lib/history'; @@ -6,7 +5,7 @@ import ProviderWrapper from 'lib/components/ProviderWrapper'; import DuplicationLayout from 'course/duplication/containers/DuplicationLayout'; import storeCreator from './store'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('course-duplication'); if (mountNode) { diff --git a/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/NewCourseForm.jsx b/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/NewCourseForm.jsx index bbf646dad3d..8db0eb903dc 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/NewCourseForm.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/NewCourseForm.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import { reduxForm, Field, Form } from 'redux-form'; @@ -31,29 +30,27 @@ const validate = (values) => { return errors; }; -class NewCourseForm extends React.Component { - render() { - const { handleSubmit, intl, onSubmit, disabled } = this.props; +const NewCourseForm = (props) => { + const { handleSubmit, intl, onSubmit, disabled } = props; - return ( -
- - - - ); - } -} + return ( +
+ + + + ); +}; NewCourseForm.propTypes = { onSubmit: PropTypes.func.isRequired, diff --git a/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/index.jsx b/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/index.jsx index eb28bb78f24..414adfd268f 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/index.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DestinationCourseSelector/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; @@ -38,7 +38,7 @@ const translations = defineMessages({ }, }); -class DestinationCourseSelector extends React.Component { +class DestinationCourseSelector extends Component { renderExistingCourseForm = () => { const { currentHost, diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateAllButton.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateAllButton.jsx index 14fb973f8c9..33e67083f6b 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateAllButton.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateAllButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { submit, isValid } from 'redux-form'; @@ -33,7 +33,7 @@ const styles = { }, }; -class DuplicateAllButton extends React.Component { +class DuplicateAllButton extends Component { constructor(props) { super(props); this.state = { confirmationOpen: false }; diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateButton.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateButton.jsx index 4dd9f4cb459..9d9a9562d64 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateButton.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -27,34 +26,32 @@ const styles = { }, }; -class DuplicateButton extends React.Component { - render() { - const { dispatch, isCourseSelected, isItemSelected, isChangingCourse } = - this.props; +const DuplicateButton = (props) => { + const { dispatch, isCourseSelected, isItemSelected, isChangingCourse } = + props; - let label; - if (!isCourseSelected) { - label = 'selectCourse'; - } else if (!isItemSelected) { - label = 'selectItem'; - } else { - label = 'duplicateItems'; - } - - return ( - <> - } - onClick={() => dispatch(showDuplicateItemsConfirmation())} - style={styles.button} - /> - - - ); + let label; + if (!isCourseSelected) { + label = 'selectCourse'; + } else if (!isItemSelected) { + label = 'selectItem'; + } else { + label = 'duplicateItems'; } -} + + return ( + <> + } + onClick={() => dispatch(showDuplicateItemsConfirmation())} + style={styles.button} + /> + + + ); +}; DuplicateButton.propTypes = { isChangingCourse: PropTypes.bool, diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx index c16703d04c3..84fbf8e552f 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/AchievementsListing.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -19,7 +19,7 @@ const styles = { }, }; -class AchievementsListing extends React.Component { +class AchievementsListing extends Component { static renderRow(achievement) { return ( 0; + const hasOrphanTabs = orphanTabs && orphanTabs.length > 0; + const categoryRow = category + ? AssessmentsListing.renderCategoryRow(category) + : AssessmentsListing.renderDefaultCategoryRow(); + const tabsTrees = (tabs) => + tabs && + tabs.map((tab) => AssessmentsListing.renderTabTree(tab, tab.assessments)); + return ( - } - /> + + + {categoryRow} + {hasOrphanAssessments && + AssessmentsListing.renderTabTree(null, orphanAssessments)} + {hasOrphanTabs && tabsTrees(orphanTabs)} + {category && tabsTrees(category.tabs)} + + ); } - static renderTabRow(tab) { + static renderCategoryRow(category) { return ( - - {tab.title} + + {category.title} } /> ); } - static renderTabTree(tab, children) { + static renderDefaultCategoryRow() { return ( -
- {tab - ? AssessmentsListing.renderTabRow(tab) - : AssessmentsListing.renderDefaultTabRow()} - {children && - children.length > 0 && - children.map(AssessmentsListing.renderAssessmentRow)} -
+ } + /> ); } - static renderDefaultCategoryRow() { + static renderDefaultTabRow() { return ( } + indentLevel={1} + label={} /> ); } - static renderCategoryRow(category) { + static renderTabRow(tab) { return ( - - {category.title} + + {tab.title} } /> ); } - static renderCategoryCard(category, orphanTabs, orphanAssessments) { - const hasOrphanAssessments = - orphanAssessments && orphanAssessments.length > 0; - const hasOrphanTabs = orphanTabs && orphanTabs.length > 0; - const categoryRow = category - ? AssessmentsListing.renderCategoryRow(category) - : AssessmentsListing.renderDefaultCategoryRow(); - const tabsTrees = (tabs) => - tabs && - tabs.map((tab) => AssessmentsListing.renderTabTree(tab, tab.assessments)); - + static renderTabTree(tab, children) { return ( - - - {categoryRow} - {hasOrphanAssessments && - AssessmentsListing.renderTabTree(null, orphanAssessments)} - {hasOrphanTabs && tabsTrees(orphanTabs)} - {category && tabsTrees(category.tabs)} - - +
+ {tab + ? AssessmentsListing.renderTabRow(tab) + : AssessmentsListing.renderDefaultTabRow()} + {children && + children.length > 0 && + children.map(AssessmentsListing.renderAssessmentRow)} +
); } diff --git a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx index 8838a3e30ed..c4f50117100 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/DuplicateItemsConfirmation/MaterialsListing.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -27,7 +27,7 @@ const translations = defineMessages({ }, }); -class MaterialsListing extends React.Component { +class MaterialsListing extends Component { static renderRootRow() { return ( + {VideoListing.renderTabRow(tab)} + {tab.videos.map(VideoListing.renderVideoRow)} +
+ ); + } + static renderTabRow(tab) { return ( - {VideoListing.renderTabRow(tab)} - {tab.videos.map(VideoListing.renderVideoRow)} -
- ); - } - static renderVideoRow(video) { return ( +

+ +

+ {this.renderdestinationCourseCard()} + + + + + + + + + + + ); + } + renderdestinationCourseCard() { const { destinationCourses, destinationCourseId } = this.props; const destinationCourse = destinationCourses.find( @@ -67,26 +87,6 @@ class DuplicateItemsConfirmation extends React.Component { ); } - renderListing() { - return ( - <> -

- -

- {this.renderdestinationCourseCard()} - - - - - - - - - - - ); - } - render() { const { dispatch, diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx index 7ffb05f7109..1cbce2a562e 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AchievementsSelector.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -33,7 +33,7 @@ const styles = { }, }; -class AchievementsSelector extends React.Component { +class AchievementsSelector extends Component { setAllAchievementsSelection = (value) => { const { dispatch, achievements } = this.props; @@ -48,6 +48,30 @@ class AchievementsSelector extends React.Component { }); }; + renderBody() { + const { achievements } = this.props; + + if (achievements.length < 1) { + return ( + + + + ); + } + + return ( + <> + {achievements.length > 1 ? ( + + ) : null} + {achievements.map((achievement) => this.renderRow(achievement))} + + ); + } + renderRow(achievement) { const { dispatch, selectedItems } = this.props; const checked = @@ -82,30 +106,6 @@ class AchievementsSelector extends React.Component { ); } - renderBody() { - const { achievements } = this.props; - - if (achievements.length < 1) { - return ( - - - - ); - } - - return ( - <> - {achievements.length > 1 ? ( - - ) : null} - {achievements.map((achievement) => this.renderRow(achievement))} - - ); - } - render() { const { achievements } = this.props; if (!achievements) { diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx index d20a2d8207f..585322cfc43 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/AssessmentsSelector.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -22,7 +22,15 @@ const translations = defineMessages({ }, }); -class AssessmentsSelector extends React.Component { +class AssessmentsSelector extends Component { + categorySetAll = (category) => (value) => { + const { dispatch, categoryDisabled } = this.props; + if (!categoryDisabled) { + dispatch(setItemSelectedBoolean(CATEGORY, category.id, value)); + } + category.tabs.forEach((tab) => this.tabSetAll(tab)(value)); + }; + tabSetAll = (tab) => (value) => { const { dispatch, tabDisabled } = this.props; if (!tabDisabled) { @@ -33,14 +41,6 @@ class AssessmentsSelector extends React.Component { }); }; - categorySetAll = (category) => (value) => { - const { dispatch, categoryDisabled } = this.props; - if (!categoryDisabled) { - dispatch(setItemSelectedBoolean(CATEGORY, category.id, value)); - } - category.tabs.forEach((tab) => this.tabSetAll(tab)(value)); - }; - renderAssessmentTree(assessment) { const { dispatch, selectedItems } = this.props; const { id, title, published } = assessment; @@ -66,57 +66,57 @@ class AssessmentsSelector extends React.Component { ); } - renderTabTree(tab) { - const { dispatch, selectedItems, tabDisabled } = this.props; - const { id, title, assessments } = tab; - const checked = !!selectedItems[TAB][id]; + renderCategoryTree(category) { + const { dispatch, selectedItems, categoryDisabled } = this.props; + const { id, title, tabs } = category; + const checked = !!selectedItems[CATEGORY][id]; return (
- + {title} } onCheck={(e, value) => - dispatch(setItemSelectedBoolean(TAB, id, value)) + dispatch(setItemSelectedBoolean(CATEGORY, id, value)) } > - + - {assessments.map((assessment) => this.renderAssessmentTree(assessment))} + {tabs.map((tab) => this.renderTabTree(tab))}
); } - renderCategoryTree(category) { - const { dispatch, selectedItems, categoryDisabled } = this.props; - const { id, title, tabs } = category; - const checked = !!selectedItems[CATEGORY][id]; + renderTabTree(tab) { + const { dispatch, selectedItems, tabDisabled } = this.props; + const { id, title, assessments } = tab; + const checked = !!selectedItems[TAB][id]; return (
- + {title} } onCheck={(e, value) => - dispatch(setItemSelectedBoolean(CATEGORY, id, value)) + dispatch(setItemSelectedBoolean(TAB, id, value)) } > - + - {tabs.map((tab) => this.renderTabTree(tab))} + {assessments.map((assessment) => this.renderAssessmentTree(assessment))}
); } diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx index 36324913dca..95d5ed0fc31 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/MaterialsSelector.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -20,7 +20,7 @@ const translations = defineMessages({ }, }); -class MaterialsSelector extends React.Component { +class MaterialsSelector extends Component { folderSetAll = (folder) => (value) => { this.props.dispatch(setItemSelectedBoolean(FOLDER, folder.id, value)); folder.subfolders.forEach((subfolder) => @@ -31,27 +31,6 @@ class MaterialsSelector extends React.Component { }); }; - renderMaterial(material, indentLevel) { - const { dispatch, selectedItems } = this.props; - const checked = !!selectedItems[MATERIAL][material.id]; - - return ( - - - {material.name} - - } - onCheck={(e, value) => - dispatch(setItemSelectedBoolean(MATERIAL, material.id, value)) - } - {...{ checked, indentLevel }} - /> - ); - } - renderFolder(folder, indentLevel) { const { dispatch, selectedItems } = this.props; const { id, name, materials, subfolders } = folder; @@ -86,6 +65,27 @@ class MaterialsSelector extends React.Component { ); } + renderMaterial(material, indentLevel) { + const { dispatch, selectedItems } = this.props; + const checked = !!selectedItems[MATERIAL][material.id]; + + return ( + + + {material.name} + + } + onCheck={(e, value) => + dispatch(setItemSelectedBoolean(MATERIAL, material.id, value)) + } + {...{ checked, indentLevel }} + /> + ); + } + render() { const { folders } = this.props; if (!folders) { diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx index 8524c52479c..e74f4e984c1 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/SurveysSelector.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -19,7 +19,7 @@ const translations = defineMessages({ }, }); -class SurveysSelector extends React.Component { +class SurveysSelector extends Component { setAllSurveysSelection = (value) => { const { dispatch, surveys } = this.props; @@ -30,6 +30,30 @@ class SurveysSelector extends React.Component { }); }; + renderBody() { + const { surveys } = this.props; + + if (surveys.length < 1) { + return ( + + + + ); + } + + return ( + <> + {surveys.length > 1 ? ( + + ) : null} + {surveys.map((survey) => this.renderRow(survey))} + + ); + } + renderRow(survey) { const { dispatch, selectedItems } = this.props; const checked = !!selectedItems[duplicableItemTypes.SURVEY][survey.id]; @@ -58,30 +82,6 @@ class SurveysSelector extends React.Component { ); } - renderBody() { - const { surveys } = this.props; - - if (surveys.length < 1) { - return ( - - - - ); - } - - return ( - <> - {surveys.length > 1 ? ( - - ) : null} - {surveys.map((survey) => this.renderRow(survey))} - - ); - } - render() { const { surveys } = this.props; if (!surveys) { diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx index 4bf61bb2f9e..8532ca24156 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/VideosSelector.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -21,7 +21,7 @@ const translations = defineMessages({ }, }); -class VideosSelector extends React.Component { +class VideosSelector extends Component { setAllInTab = (tab) => (value) => { const { dispatch } = this.props; dispatch(setItemSelectedBoolean(VIDEO_TAB, tab.id, value)); @@ -35,6 +35,30 @@ class VideosSelector extends React.Component { tabs.forEach((tab) => this.setAllInTab(tab)(value)); }; + renderBody() { + const { tabs } = this.props; + + if (tabs.length < 1) { + return ( + + + + ); + } + + return ( + <> + {tabs.length > 1 ? ( + + ) : null} + {tabs.map((tab) => this.renderTabTree(tab))} + + ); + } + renderTabTree(tab) { const { dispatch, selectedItems } = this.props; const { id, title, videos } = tab; @@ -85,30 +109,6 @@ class VideosSelector extends React.Component { ); } - renderBody() { - const { tabs } = this.props; - - if (tabs.length < 1) { - return ( - - - - ); - } - - return ( - <> - {tabs.length > 1 ? ( - - ) : null} - {tabs.map((tab) => this.renderTabTree(tab))} - - ); - } - render() { const { tabs } = this.props; if (!tabs) { diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/index.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/index.jsx index 9478ea30562..ea4fc41536a 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/index.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelector/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -28,38 +27,36 @@ const styles = { }, }; -class ItemsSelector extends React.Component { - static panelComponentMap = { - [itemSelectorPanels.ASSESSMENTS]: AssessmentsSelector, - [itemSelectorPanels.SURVEYS]: SurveysSelector, - [itemSelectorPanels.ACHIEVEMENTS]: AchievementsSelector, - [itemSelectorPanels.MATERIALS]: MaterialsSelector, - [itemSelectorPanels.VIDEOS]: VideosSelector, - }; +const ItemsSelector = (props) => { + const { currentPanel, destinationCourse } = props; - render() { - const { currentPanel, destinationCourse } = this.props; + if (!currentPanel) { + return ( +
+ +
+ ); + } - if (!currentPanel) { - return ( -
- -
- ); - } + if (!destinationCourse.enabledComponents.includes(currentPanel)) { + return ( +
+ +
+ ); + } - if (!destinationCourse.enabledComponents.includes(currentPanel)) { - return ( -
- -
- ); - } + const CurrentPanel = ItemsSelector.panelComponentMap[currentPanel]; + return ; +}; - const CurrentPanel = ItemsSelector.panelComponentMap[currentPanel]; - return ; - } -} +ItemsSelector.panelComponentMap = { + [itemSelectorPanels.ASSESSMENTS]: AssessmentsSelector, + [itemSelectorPanels.SURVEYS]: SurveysSelector, + [itemSelectorPanels.ACHIEVEMENTS]: AchievementsSelector, + [itemSelectorPanels.MATERIALS]: MaterialsSelector, + [itemSelectorPanels.VIDEOS]: VideosSelector, +}; ItemsSelector.propTypes = { currentPanel: PropTypes.string, diff --git a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx index 96749047abc..21e21d128c4 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/ItemsSelectorMenu/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -36,7 +36,7 @@ const styles = { }, }; -class ItemsSelectorMenu extends React.Component { +class ItemsSelectorMenu extends Component { renderSidebarItem(panelKey, titleKey, count) { const { dispatch, enabledComponents } = this.props; if (!enabledComponents.includes(panelKey)) { diff --git a/client/app/bundles/course/duplication/pages/Duplication/__test__/DuplicateButton.test.jsx b/client/app/bundles/course/duplication/pages/Duplication/__test__/DuplicateButton.test.jsx index 6a850954e6c..054a1d015ff 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/__test__/DuplicateButton.test.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/__test__/DuplicateButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { mount } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; diff --git a/client/app/bundles/course/duplication/pages/Duplication/__test__/ObjectDuplication.test.jsx b/client/app/bundles/course/duplication/pages/Duplication/__test__/ObjectDuplication.test.jsx index dc0268cf03a..b1baf8b836a 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/__test__/ObjectDuplication.test.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/__test__/ObjectDuplication.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import { MemoryRouter } from 'react-router-dom'; import CourseAPI from 'api/course'; @@ -49,7 +48,7 @@ describe('', () => { ); const rootFolder = sortedData.materialsComponent[0]; expect(courseTitles).toEqual(['Course A', 'Course B', 'Course C']); - expect(sortedData.materialsComponent.length).toBe(1); + expect(sortedData.materialsComponent).toHaveLength(1); expect(rootFolder.name).toBe('Root'); expect(rootFolder.subfolders[0].name).toBe('L1'); expect(rootFolder.subfolders[0].subfolders[0].name).toBe('L2'); diff --git a/client/app/bundles/course/duplication/pages/Duplication/index.jsx b/client/app/bundles/course/duplication/pages/Duplication/index.jsx index 2afb7bd358f..2120b2f7e7c 100644 --- a/client/app/bundles/course/duplication/pages/Duplication/index.jsx +++ b/client/app/bundles/course/duplication/pages/Duplication/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { @@ -101,11 +101,64 @@ const styles = { }, }; -class Duplication extends React.Component { +class Duplication extends Component { componentDidMount() { this.props.dispatch(fetchObjectsList()); } + renderBody() { + const { + isLoading, + isCourseSelected, + duplicationMode, + modesAllowed, + enabledComponents, + } = this.props; + if (isLoading) { + return ; + } + + if (!modesAllowed || modesAllowed.length < 1) { + return ( + + + + ); + } + if (!enabledComponents || enabledComponents.length < 1) { + return ( + + + + ); + } + + return ( +
+
+

+ +

+
+ {this.renderFromCourseMain()} + +
{this.renderToCourseSidebar()}
+ + + + + {this.renderItemsSelectorSidebar()} + {duplicationMode === duplicationModes.OBJECT && isCourseSelected ? ( + + + + ) : ( +
+ )} +
+ ); + } + renderFromCourseMain() { const { currentHost, @@ -140,29 +193,27 @@ class Duplication extends React.Component { ); } - renderToCourseSidebar() { - const { dispatch, modesAllowed } = this.props; - const header = ( -

- -

- ); + renderItemsSelectorSidebar() { + const { duplicationMode, isCourseSelected } = this.props; - const isSingleValidMode = - modesAllowed && - modesAllowed.length === 1 && - duplicationModes[modesAllowed[0]]; - if (isSingleValidMode) { - dispatch(setDuplicationMode(modesAllowed[0])); - return header; + if (duplicationMode === duplicationModes.COURSE) { + return ( +
+ +
+ ); } - - return ( - <> - {header} - {this.renderToCourseModeSelector()} - - ); + if (isCourseSelected) { + return ( +
+

+ +

+ +
+ ); + } + return
; } renderToCourseModeSelector() { @@ -186,79 +237,28 @@ class Duplication extends React.Component { ); } - renderItemsSelectorSidebar() { - const { duplicationMode, isCourseSelected } = this.props; - - if (duplicationMode === duplicationModes.COURSE) { - return ( -
- -
- ); - } - if (isCourseSelected) { - return ( -
-

- -

- -
- ); - } - return
; - } - - renderBody() { - const { - isLoading, - isCourseSelected, - duplicationMode, - modesAllowed, - enabledComponents, - } = this.props; - if (isLoading) { - return ; - } + renderToCourseSidebar() { + const { dispatch, modesAllowed } = this.props; + const header = ( +

+ +

+ ); - if (!modesAllowed || modesAllowed.length < 1) { - return ( - - - - ); - } - if (!enabledComponents || enabledComponents.length < 1) { - return ( - - - - ); + const isSingleValidMode = + modesAllowed && + modesAllowed.length === 1 && + duplicationModes[modesAllowed[0]]; + if (isSingleValidMode) { + dispatch(setDuplicationMode(modesAllowed[0])); + return header; } return ( -
-
-

- -

-
- {this.renderFromCourseMain()} - -
{this.renderToCourseSidebar()}
- - - - - {this.renderItemsSelectorSidebar()} - {duplicationMode === duplicationModes.OBJECT && isCourseSelected ? ( - - - - ) : ( -
- )} -
+ <> + {header} + {this.renderToCourseModeSelector()} + ); } diff --git a/client/app/bundles/course/forum/components/ForumPost.jsx b/client/app/bundles/course/forum/components/ForumPost.jsx index d091246b84f..e36583b7742 100644 --- a/client/app/bundles/course/forum/components/ForumPost.jsx +++ b/client/app/bundles/course/forum/components/ForumPost.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import { Divider, Card, CardHeader, CardText, FlatButton } from 'material-ui'; import PropTypes from 'prop-types'; import moment from 'lib/moment'; @@ -25,7 +25,7 @@ const styles = { expandButton: { marginTop: 8 }, }; -export default class ForumPost extends React.Component { +export default class ForumPost extends Component { constructor(props) { super(props); this.state = { diff --git a/client/app/bundles/course/group/components/GroupCard.jsx b/client/app/bundles/course/group/components/GroupCard.jsx index ad1542b9144..8e9ae59e4fc 100644 --- a/client/app/bundles/course/group/components/GroupCard.jsx +++ b/client/app/bundles/course/group/components/GroupCard.jsx @@ -1,5 +1,3 @@ -import React from 'react'; - import { Card, CardActions, diff --git a/client/app/bundles/course/group/components/Note.jsx b/client/app/bundles/course/group/components/Note.jsx index e0a22bd6d65..e5ebcce3efd 100644 --- a/client/app/bundles/course/group/components/Note.jsx +++ b/client/app/bundles/course/group/components/Note.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Card, CardHeader, CardText } from 'material-ui'; import { orange900, orange200 } from 'material-ui/styles/colors'; diff --git a/client/app/bundles/course/group/forms/GroupCreationForm.jsx b/client/app/bundles/course/group/forms/GroupCreationForm.jsx index f0b645c09a5..4c1fc8cfbda 100644 --- a/client/app/bundles/course/group/forms/GroupCreationForm.jsx +++ b/client/app/bundles/course/group/forms/GroupCreationForm.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useCallback, useMemo } from 'react'; +import { useEffect, useCallback, useMemo } from 'react'; import PropTypes from 'prop-types'; import { change, Field, Form, formValueSelector, reduxForm } from 'redux-form'; import { red500 } from 'material-ui/styles/colors'; diff --git a/client/app/bundles/course/group/forms/GroupFormDialog.jsx b/client/app/bundles/course/group/forms/GroupFormDialog.jsx index 1f6a9cfaee5..068bc60fb2a 100644 --- a/client/app/bundles/course/group/forms/GroupFormDialog.jsx +++ b/client/app/bundles/course/group/forms/GroupFormDialog.jsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import PropTypes from 'prop-types'; import { isPristine, submit } from 'redux-form'; import { connect } from 'react-redux'; diff --git a/client/app/bundles/course/group/forms/NameDescriptionForm.jsx b/client/app/bundles/course/group/forms/NameDescriptionForm.jsx index 21039da47bf..6388fc1287d 100644 --- a/client/app/bundles/course/group/forms/NameDescriptionForm.jsx +++ b/client/app/bundles/course/group/forms/NameDescriptionForm.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { reduxForm, Field, Form } from 'redux-form'; diff --git a/client/app/bundles/course/group/index.jsx b/client/app/bundles/course/group/index.jsx index f41ad4cdb59..cd5d856354c 100644 --- a/client/app/bundles/course/group/index.jsx +++ b/client/app/bundles/course/group/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import storeCreator from './store'; @@ -6,7 +5,7 @@ import GroupIndex from './pages/GroupIndex'; import GroupShow from './pages/GroupShow'; import GroupNew from './pages/GroupNew'; -$(document).ready(() => { +$(() => { const categoryShowMountNode = document.getElementById( 'course-group-show-component', ); diff --git a/client/app/bundles/course/group/pages/GroupIndex/index.jsx b/client/app/bundles/course/group/pages/GroupIndex/index.jsx index 505d6839cb1..9eedc22c483 100644 --- a/client/app/bundles/course/group/pages/GroupIndex/index.jsx +++ b/client/app/bundles/course/group/pages/GroupIndex/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { defineMessages, FormattedMessage } from 'react-intl'; import Note from '../../components/Note'; diff --git a/client/app/bundles/course/group/pages/GroupNew/index.jsx b/client/app/bundles/course/group/pages/GroupNew/index.jsx index e4532acd665..cfc387392ea 100644 --- a/client/app/bundles/course/group/pages/GroupNew/index.jsx +++ b/client/app/bundles/course/group/pages/GroupNew/index.jsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import { useCallback } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { RaisedButton } from 'material-ui'; diff --git a/client/app/bundles/course/group/pages/GroupShow/CategoryCard.jsx b/client/app/bundles/course/group/pages/GroupShow/CategoryCard.jsx index 41ee36a684c..fc105e3ef88 100644 --- a/client/app/bundles/course/group/pages/GroupShow/CategoryCard.jsx +++ b/client/app/bundles/course/group/pages/GroupShow/CategoryCard.jsx @@ -1,4 +1,4 @@ -import React, { useCallback, useState, useMemo } from 'react'; +import { useCallback, useState, useMemo } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, diff --git a/client/app/bundles/course/group/pages/GroupShow/GroupManager/ChangeSummaryTable.jsx b/client/app/bundles/course/group/pages/GroupShow/GroupManager/ChangeSummaryTable.jsx index e40f0f49516..cab0aad30c7 100644 --- a/client/app/bundles/course/group/pages/GroupShow/GroupManager/ChangeSummaryTable.jsx +++ b/client/app/bundles/course/group/pages/GroupShow/GroupManager/ChangeSummaryTable.jsx @@ -8,7 +8,6 @@ import { } from 'material-ui'; import { red100, blue100, green100 } from 'material-ui/styles/colors'; import PropTypes from 'prop-types'; -import React from 'react'; import { defineMessages, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; import GroupCard from '../../../components/GroupCard'; diff --git a/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupManager.jsx b/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupManager.jsx index 77003ae0612..66bce363e3d 100644 --- a/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupManager.jsx +++ b/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupManager.jsx @@ -1,4 +1,4 @@ -import React, { useCallback, useMemo, useState } from 'react'; +import { useCallback, useMemo, useState } from 'react'; import PropTypes from 'prop-types'; import { RaisedButton } from 'material-ui'; import { diff --git a/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManager.jsx b/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManager.jsx index 506ea61ba05..cdd343c1957 100644 --- a/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManager.jsx +++ b/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManager.jsx @@ -1,4 +1,4 @@ -import React, { useCallback, useMemo, useState } from 'react'; +import { useCallback, useMemo, useState } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Checkbox, TextField } from 'material-ui'; diff --git a/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManagerList.jsx b/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManagerList.jsx index 99af6670bb0..720085a6c15 100644 --- a/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManagerList.jsx +++ b/client/app/bundles/course/group/pages/GroupShow/GroupManager/GroupUserManagerList.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Checkbox, diff --git a/client/app/bundles/course/group/pages/GroupShow/GroupTableCard.jsx b/client/app/bundles/course/group/pages/GroupShow/GroupTableCard.jsx index dc1d7e1c766..ac85e7b4edb 100644 --- a/client/app/bundles/course/group/pages/GroupShow/GroupTableCard.jsx +++ b/client/app/bundles/course/group/pages/GroupShow/GroupTableCard.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Table, TableBody, diff --git a/client/app/bundles/course/group/pages/GroupShow/index.jsx b/client/app/bundles/course/group/pages/GroupShow/index.jsx index 582f4154d65..8d26b860776 100644 --- a/client/app/bundles/course/group/pages/GroupShow/index.jsx +++ b/client/app/bundles/course/group/pages/GroupShow/index.jsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; diff --git a/client/app/bundles/course/lesson-plan/containers/ColumnVisibilityDropdown/index.jsx b/client/app/bundles/course/lesson-plan/containers/ColumnVisibilityDropdown/index.jsx index f464e20ad65..e155216b9ef 100644 --- a/client/app/bundles/course/lesson-plan/containers/ColumnVisibilityDropdown/index.jsx +++ b/client/app/bundles/course/lesson-plan/containers/ColumnVisibilityDropdown/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -28,7 +28,7 @@ const styles = { }, }; -class ColumnVisibilityDropdown extends React.Component { +class ColumnVisibilityDropdown extends Component { constructor(props) { super(props); diff --git a/client/app/bundles/course/lesson-plan/containers/EventFormDialog/EventForm.jsx b/client/app/bundles/course/lesson-plan/containers/EventFormDialog/EventForm.jsx index 27b67d9ce5c..b5aafd4ca3c 100644 --- a/client/app/bundles/course/lesson-plan/containers/EventFormDialog/EventForm.jsx +++ b/client/app/bundles/course/lesson-plan/containers/EventFormDialog/EventForm.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { reduxForm, Field, Form } from 'redux-form'; diff --git a/client/app/bundles/course/lesson-plan/containers/EventFormDialog/index.jsx b/client/app/bundles/course/lesson-plan/containers/EventFormDialog/index.jsx index d172cd8aa48..4a95eff81af 100644 --- a/client/app/bundles/course/lesson-plan/containers/EventFormDialog/index.jsx +++ b/client/app/bundles/course/lesson-plan/containers/EventFormDialog/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx index 04b9dfb0927..622704c315a 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanFilter/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -17,7 +17,7 @@ const translations = defineMessages({ }, }); -class LessonPlanFilter extends React.Component { +class LessonPlanFilter extends Component { constructor(props) { super(props); diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/EnterEditModeButton.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/EnterEditModeButton.jsx index 920878b1415..f847ca7e514 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/EnterEditModeButton.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/EnterEditModeButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import RaisedButton from 'material-ui/RaisedButton'; diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/ExitEditModeButton.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/ExitEditModeButton.jsx index b9cdd6edfad..898a0e3f5eb 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/ExitEditModeButton.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/ExitEditModeButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import RaisedButton from 'material-ui/RaisedButton'; diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewEventButton.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewEventButton.jsx index d86c201ba13..1f0bb751801 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewEventButton.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewEventButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { @@ -25,7 +25,7 @@ const translations = defineMessages({ }, }); -class NewEventButton extends React.Component { +class NewEventButton extends Component { createEventHandler = (data) => { const { dispatch } = this.props; const successMessage = ; diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewMilestoneButton.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewMilestoneButton.jsx index a3fd36e5567..9de7a108fc4 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewMilestoneButton.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/NewMilestoneButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { @@ -31,7 +31,7 @@ const styles = { }, }; -class NewMilestoneButton extends React.Component { +class NewMilestoneButton extends Component { createMilestoneHandler = (data) => { const { dispatch } = this.props; const successMessage = ; diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewEventButton.test.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewEventButton.test.jsx index 31227c6ff46..efd3e482963 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewEventButton.test.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewEventButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { mount } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewMilestoneButton.test.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewMilestoneButton.test.jsx index 237de1ab0af..a30831ba195 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewMilestoneButton.test.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/NewMilestoneButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { mount } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/index.test.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/index.test.jsx index 7305881c57e..41aa77c7bc0 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/index.test.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import { mount } from 'enzyme'; import MockAdapter from 'axios-mock-adapter'; @@ -68,7 +67,7 @@ describe('LessonPlan', () => { expect(spy).toHaveBeenCalled(); lessonPlan.update(); // A milestone should be automatically generated since the event starts before the milestone - expect(lessonPlan.find('LessonPlanGroup').length).toBe(2); - expect(lessonPlan.find('LessonPlanItem').length).toBe(1); + expect(lessonPlan.find('LessonPlanGroup')).toHaveLength(2); + expect(lessonPlan.find('LessonPlanItem')).toHaveLength(1); }); }); diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/index.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/index.jsx index 56b65f99eaf..06940856e72 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/index.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanLayout/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withRouter, Route, Switch } from 'react-router-dom'; @@ -51,38 +51,12 @@ const styles = { const lessonPlanPath = '/courses/:courseId/lesson_plan'; -class LessonPlanLayout extends React.Component { +class LessonPlanLayout extends Component { componentDidMount() { const { dispatch } = this.props; dispatch(fetchLessonPlan()); } - renderHeader() { - if (!this.props.canManageLessonPlan) { - return null; - } - - return ( - - - - - - - - - - ); - } - renderBody() { const { isLoading, groups } = this.props; @@ -110,6 +84,32 @@ class LessonPlanLayout extends React.Component { ); } + renderHeader() { + if (!this.props.canManageLessonPlan) { + return null; + } + + return ( + + + + + + + + + + ); + } + render() { return (
diff --git a/client/app/bundles/course/lesson-plan/containers/LessonPlanNav/index.jsx b/client/app/bundles/course/lesson-plan/containers/LessonPlanNav/index.jsx index df0b8cabb7b..8fa9535090b 100644 --- a/client/app/bundles/course/lesson-plan/containers/LessonPlanNav/index.jsx +++ b/client/app/bundles/course/lesson-plan/containers/LessonPlanNav/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -22,7 +22,7 @@ const styles = { }, }; -class LessonPlanNav extends React.Component { +class LessonPlanNav extends Component { constructor(props) { super(props); diff --git a/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/MilestoneForm.jsx b/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/MilestoneForm.jsx index 53ef6fa50c4..512f8bcfe8f 100644 --- a/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/MilestoneForm.jsx +++ b/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/MilestoneForm.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import { reduxForm, Field, Form } from 'redux-form'; diff --git a/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/index.jsx b/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/index.jsx index 05fb7bb5a17..2bd01e580a3 100644 --- a/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/index.jsx +++ b/client/app/bundles/course/lesson-plan/containers/MilestoneFormDialog/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; diff --git a/client/app/bundles/course/lesson-plan/items.jsx b/client/app/bundles/course/lesson-plan/items.jsx index edb0586fbda..8438d762bc4 100644 --- a/client/app/bundles/course/lesson-plan/items.jsx +++ b/client/app/bundles/course/lesson-plan/items.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import { Router } from 'react-router-dom'; import history from 'lib/history'; @@ -6,7 +5,7 @@ import ProviderWrapper from 'lib/components/ProviderWrapper'; import LessonPlanLayout from 'course/lesson-plan/containers/LessonPlanLayout'; import storeCreator from './store'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('lesson-plan-items'); if (mountNode) { diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/DateCell.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/DateCell.jsx index 63885db5e1e..1ccad76b781 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/DateCell.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/DateCell.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import moment from 'lib/moment'; import DateTimePicker from 'lib/components/form/DateTimePicker'; @@ -10,7 +10,7 @@ const datePropType = PropTypes.oneOfType([ PropTypes.instanceOf(Date), ]); -class DateCell extends React.Component { +class DateCell extends Component { /** * Updates a date value for a lesson plan item if the date has changed. * If it is start_at that is shifted, shift existing end dates by the same amount. diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/PublishedCell.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/PublishedCell.jsx index 92b47dd26ce..2ec0cc02bb2 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/PublishedCell.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/PublishedCell.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import Toggle from 'material-ui/Toggle'; @@ -8,20 +7,18 @@ const styles = { }, }; -class PublishedCell extends React.PureComponent { - render() { - const { published, onToggle } = this.props; - return ( - - - - ); - } -} +const PublishedCell = (props) => { + const { published, onToggle } = props; + return ( + + + + ); +}; PublishedCell.propTypes = { published: PropTypes.bool.isRequired, diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx index 319780900e5..92cf766bce1 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/ItemRow/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -23,7 +23,7 @@ const datePropType = PropTypes.oneOfType([ PropTypes.instanceOf(Date), ]); -class ItemRow extends React.Component { +class ItemRow extends Component { updateItem = (payload) => { const { id, title, dispatch } = this.props; const successMessage = ( diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/MilestoneRow.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/MilestoneRow.jsx index b6c368257a3..14aa3ef853a 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/MilestoneRow.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/MilestoneRow.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -22,7 +22,7 @@ const translations = defineMessages({ const sameDate = (a, b) => (!a && !b) || (a && b && moment(a).isSame(b, 'minute')); -class MilestoneRow extends React.Component { +class MilestoneRow extends Component { updateMilestoneStartAt = (_, newDate) => { const { id, title, startAt, dispatch } = this.props; if (sameDate(startAt, newDate)) { diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/ItemRow.test.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/ItemRow.test.jsx index b888ee35842..28d4dc728df 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/ItemRow.test.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/ItemRow.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import MockAdapter from 'axios-mock-adapter'; import CourseAPI from 'api/course'; diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/MilestoneRow.test.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/MilestoneRow.test.jsx index 55020c47770..6107c8efbab 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/MilestoneRow.test.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/MilestoneRow.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import MockAdapter from 'axios-mock-adapter'; import CourseAPI from 'api/course'; diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/index.test.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/index.test.jsx index e8d0d0dc7f9..25e3a4dea66 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/index.test.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import storeCreator from 'course/lesson-plan/store'; import LessonPlanEdit from '../index'; @@ -37,7 +36,7 @@ describe('', () => { buildContextOptions(store), ); - expect(lessonPlanEdit.find('ItemRow').length).toBe(1); - expect(lessonPlanEdit.find('MilestoneRow').length).toBe(1); + expect(lessonPlanEdit.find('ItemRow')).toHaveLength(1); + expect(lessonPlanEdit.find('MilestoneRow')).toHaveLength(1); }); }); diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/index.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/index.jsx index fb51f115e6e..c878f046f07 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/index.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanEdit/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -16,29 +16,7 @@ const styles = { }, }; -class LessonPlanEdit extends React.Component { - renderHeader() { - const { columnsVisible } = this.props; - - const headerFor = (field) => ( - - - - ); - return ( - - - {columnsVisible[ITEM_TYPE] ? headerFor(ITEM_TYPE) : null} - {headerFor(TITLE)} - {columnsVisible[START_AT] ? headerFor(START_AT) : null} - {columnsVisible[BONUS_END_AT] ? headerFor(BONUS_END_AT) : null} - {columnsVisible[END_AT] ? headerFor(END_AT) : null} - {columnsVisible[PUBLISHED] ? headerFor(PUBLISHED) : null} - - - ); - } - +class LessonPlanEdit extends Component { renderGroup = (group) => { const { id, milestone, items } = group; @@ -73,6 +51,28 @@ class LessonPlanEdit extends React.Component { return rows; }; + renderHeader() { + const { columnsVisible } = this.props; + + const headerFor = (field) => ( + + + + ); + return ( + + + {columnsVisible[ITEM_TYPE] ? headerFor(ITEM_TYPE) : null} + {headerFor(TITLE)} + {columnsVisible[START_AT] ? headerFor(START_AT) : null} + {columnsVisible[BONUS_END_AT] ? headerFor(BONUS_END_AT) : null} + {columnsVisible[END_AT] ? headerFor(END_AT) : null} + {columnsVisible[PUBLISHED] ? headerFor(PUBLISHED) : null} + + + ); + } + render() { const { groups } = this.props; diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanGroup.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanGroup.jsx index ce2232ce656..e2157c499fe 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanGroup.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanGroup.jsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { Element } from 'react-scroll'; @@ -40,7 +40,7 @@ const styles = { }, }; -class LessonPlanGroup extends React.Component { +class LessonPlanGroup extends Component { static renderMilestoneCardTitle(milestone) { const { title, description, start_at } = milestone; @@ -125,7 +125,7 @@ LessonPlanGroup.propTypes = { group: PropTypes.shape({ id: PropTypes.string, milestone: PropTypes.object, - items: PropTypes.arrayOf({}), + items: PropTypes.arrayOf(PropTypes.object), }).isRequired, initiallyExpanded: PropTypes.bool, }; diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/AdminTools.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/AdminTools.jsx index 29a612ab733..c9fae5833f7 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/AdminTools.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/AdminTools.jsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; @@ -51,16 +51,18 @@ const styles = { }, }; -class AdminTools extends React.PureComponent { - updateEventHandler = (data) => { +class AdminTools extends PureComponent { + deleteEventHandler = () => { const { dispatch, intl, - item: { eventId }, + item: { id, eventId }, } = this.props; - const successMessage = intl.formatMessage(translations.updateSuccess); - const failureMessage = intl.formatMessage(translations.updateFailure); - return dispatch(updateEvent(eventId, data, successMessage, failureMessage)); + const successMessage = intl.formatMessage(translations.deleteSuccess); + const failureMessage = intl.formatMessage(translations.deleteFailure); + const handleDelete = () => + dispatch(deleteEvent(id, eventId, successMessage, failureMessage)); + return dispatch(showDeleteConfirmation(handleDelete)); }; showEditEventDialog = () => { @@ -92,17 +94,15 @@ class AdminTools extends React.PureComponent { ); }; - deleteEventHandler = () => { + updateEventHandler = (data) => { const { dispatch, intl, - item: { id, eventId }, + item: { eventId }, } = this.props; - const successMessage = intl.formatMessage(translations.deleteSuccess); - const failureMessage = intl.formatMessage(translations.deleteFailure); - const handleDelete = () => - dispatch(deleteEvent(id, eventId, successMessage, failureMessage)); - return dispatch(showDeleteConfirmation(handleDelete)); + const successMessage = intl.formatMessage(translations.updateSuccess); + const failureMessage = intl.formatMessage(translations.updateFailure); + return dispatch(updateEvent(eventId, data, successMessage, failureMessage)); }; render() { diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx index 536f505d79d..446454d67e0 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/Chips.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import Avatar from 'material-ui/Avatar'; @@ -57,48 +57,48 @@ export const formatDateRange = (startAt, endAt) => { return `${start.format(shortDateTime)} - ${end.format(shortDateTime)}`; }; -class Chips extends React.Component { - renderNotPublishedChip() { - if (this.props.published) { - return null; - } +class Chips extends Component { + renderDateTimeRangeChip() { + const { startAt, endAt } = this.props; return ( - } backgroundColor={red700} /> - + } /> + {formatDateRange(startAt, endAt)} ); } - renderTypeTagChip() { - const { itemType } = this.props; + renderLocationChip() { + const { location } = this.props; + if (!location) { + return null; + } return ( - } /> - {itemType} + } /> + {location} ); } - renderDateTimeRangeChip() { - const { startAt, endAt } = this.props; + renderNotPublishedChip() { + if (this.props.published) { + return null; + } return ( - } /> - {formatDateRange(startAt, endAt)} + } backgroundColor={red700} /> + ); } - renderLocationChip() { - const { location } = this.props; - if (!location) { - return null; - } + renderTypeTagChip() { + const { itemType } = this.props; return ( - } /> - {location} + } /> + {itemType} ); } diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/index.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/index.jsx index 7fb9c00ab82..62af126f046 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/index.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Details/index.jsx @@ -1,16 +1,9 @@ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { CardText, CardTitle } from 'material-ui/Card'; import Chips from './Chips'; -class Details extends React.PureComponent { - renderTitle() { - const { title, itemPath } = this.props; - return ( - {title} : title} /> - ); - } - +class Details extends PureComponent { renderDescription() { const { description } = this.props; if (!description) { @@ -19,6 +12,13 @@ class Details extends React.PureComponent { return ; } + renderTitle() { + const { title, itemPath } = this.props; + return ( + {title} : title} /> + ); + } + render() { const { published, itemType, startAt, endAt, location } = this.props; return ( diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Material.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Material.jsx index 04d490bed82..88468849f76 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Material.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/Material.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import Description from 'material-ui/svg-icons/action/description'; import { grey700 } from 'material-ui/styles/colors'; @@ -20,17 +19,15 @@ const styles = { }, }; -class Material extends React.PureComponent { - render() { - const { name, url } = this.props; - return ( -
- - {name} -
- ); - } -} +const Material = (props) => { + const { name, url } = props; + return ( +
+ + {name} +
+ ); +}; Material.propTypes = { name: PropTypes.string.isRequired, diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/__test__/AdminTools.test.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/__test__/AdminTools.test.jsx index b40eb182b3d..09a09b57916 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/__test__/AdminTools.test.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/__test__/AdminTools.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { shallow, mount } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; @@ -18,12 +17,12 @@ const buildShallowWrapper = (item) => { describe('', () => { it('does not show admin menu for lesson plan events', () => { const wrapper = buildShallowWrapper({ title: 'Event', eventId: 7 }); - expect(wrapper.find('RaisedButton').length).toBe(2); + expect(wrapper.find('RaisedButton')).toHaveLength(2); }); it('does not show admin menu for non-event lesson plan items', () => { const wrapper = buildShallowWrapper({ title: 'eventId absent' }); - expect(wrapper.find('RaisedButton').length).toBe(0); + expect(wrapper.find('RaisedButton')).toHaveLength(0); }); it('allows event to be deleted', () => { diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/index.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/index.jsx index ba3c1ac15cf..378dcbd8b88 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/index.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/LessonPlanItem/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { CardText } from 'material-ui/Card'; import Divider from 'material-ui/Divider'; diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/MilestoneAdminTools.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/MilestoneAdminTools.jsx index 1f299c364be..5544bfaea56 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/MilestoneAdminTools.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/MilestoneAdminTools.jsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; @@ -48,17 +48,18 @@ const styles = { }, }; -class MilestoneAdminTools extends React.PureComponent { - updateMilestoneHandler = (data) => { +class MilestoneAdminTools extends PureComponent { + deleteMilestoneHandler = () => { const { dispatch, intl, milestone: { id }, } = this.props; - - const successMessage = intl.formatMessage(translations.updateSuccess); - const failureMessage = intl.formatMessage(translations.updateFailure); - return dispatch(updateMilestone(id, data, successMessage, failureMessage)); + const successMessage = intl.formatMessage(translations.deleteSuccess); + const failureMessage = intl.formatMessage(translations.deleteFailure); + const handleDelete = () => + dispatch(deleteMilestone(id, successMessage, failureMessage)); + return dispatch(showDeleteConfirmation(handleDelete)); }; showEditMilestoneDialog = () => { @@ -77,17 +78,16 @@ class MilestoneAdminTools extends React.PureComponent { ); }; - deleteMilestoneHandler = () => { + updateMilestoneHandler = (data) => { const { dispatch, intl, milestone: { id }, } = this.props; - const successMessage = intl.formatMessage(translations.deleteSuccess); - const failureMessage = intl.formatMessage(translations.deleteFailure); - const handleDelete = () => - dispatch(deleteMilestone(id, successMessage, failureMessage)); - return dispatch(showDeleteConfirmation(handleDelete)); + + const successMessage = intl.formatMessage(translations.updateSuccess); + const failureMessage = intl.formatMessage(translations.updateFailure); + return dispatch(updateMilestone(id, data, successMessage, failureMessage)); }; render() { diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/LessonPlanShow.test.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/LessonPlanShow.test.jsx index 121d4e7ddcd..af0f9d7bd7d 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/LessonPlanShow.test.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/LessonPlanShow.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import storeCreator from 'course/lesson-plan/store'; import { UnconnectedLessonPlanShow as LessonPlanShow } from '../index'; @@ -47,7 +46,7 @@ describe('', () => { ); it('shows all visible items', () => { - expect(wrapper.find('LessonPlanItem').length).toBe(2); + expect(wrapper.find('LessonPlanItem')).toHaveLength(2); }); }); @@ -58,7 +57,7 @@ describe('', () => { ); it('shows no items', () => { - expect(wrapper.find('LessonPlanItem').length).toBe(0); + expect(wrapper.find('LessonPlanItem')).toHaveLength(0); }); }); @@ -69,7 +68,7 @@ describe('', () => { ); it('shows items for current group', () => { - expect(wrapper.find('LessonPlanItem').length).toBe(1); + expect(wrapper.find('LessonPlanItem')).toHaveLength(1); }); }); }); diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/MilestoneAdminTools.test.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/MilestoneAdminTools.test.jsx index ae5c06101da..725540b1697 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/MilestoneAdminTools.test.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/__test__/MilestoneAdminTools.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { mount, shallow } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; @@ -22,22 +21,22 @@ describe('', () => { it('hides admin tools for dummy milestone', () => { const milestone = { id: undefined, title: 'Ungrouped Items' }; expect( - buildShallowWrapper(true, milestone).find('RaisedButton').length, - ).toBe(0); + buildShallowWrapper(true, milestone).find('RaisedButton'), + ).toHaveLength(0); }); it('hides admin tools when user does not have permissions', () => { const milestone = { id: 4, title: 'User-defined Milestone' }; expect( - buildShallowWrapper(false, milestone).find('RaisedButton').length, - ).toBe(0); + buildShallowWrapper(false, milestone).find('RaisedButton'), + ).toHaveLength(0); }); it('shows admin tools when user has permissions', () => { const milestone = { id: 4, title: 'User-defined Milestone' }; expect( - buildShallowWrapper(true, milestone).find('RaisedButton').length, - ).toBe(2); + buildShallowWrapper(true, milestone).find('RaisedButton'), + ).toHaveLength(2); }); it('allows milestone to be deleted', () => { diff --git a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/index.jsx b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/index.jsx index bda5dcc9113..3282117ce52 100644 --- a/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/index.jsx +++ b/client/app/bundles/course/lesson-plan/pages/LessonPlanShow/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { scroller } from 'react-scroll'; @@ -6,7 +6,7 @@ import moment from 'lib/moment'; import { lessonPlanTypesGroups } from 'lib/types'; import LessonPlanGroup from './LessonPlanGroup'; -class LessonPlanShow extends React.Component { +class LessonPlanShow extends Component { /** * Searches for the last milestone that has just passed. * The current group contains that milestone and the items that come after that milestone, diff --git a/client/app/bundles/course/level/components/LevelRow.jsx b/client/app/bundles/course/level/components/LevelRow.jsx index b8b140e03ca..43291020ca8 100644 --- a/client/app/bundles/course/level/components/LevelRow.jsx +++ b/client/app/bundles/course/level/components/LevelRow.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; @@ -32,7 +32,23 @@ const styles = { }, }; -class LevelRow extends React.Component { +class LevelRow extends Component { + renderDeleteButton() { + const { deleteLevel, disabled, levelNumber } = this.props; + + return ( + } + onClick={deleteLevel(levelNumber)} + disabled={disabled} + style={{ minWidth: '40px', width: '40px' }} + /> + ); + } + renderInput() { const { disabled, @@ -64,22 +80,6 @@ class LevelRow extends React.Component { ); } - renderDeleteButton() { - const { deleteLevel, disabled, levelNumber } = this.props; - - return ( - } - onClick={deleteLevel(levelNumber)} - disabled={disabled} - style={{ minWidth: '40px', width: '40px' }} - /> - ); - } - render() { const { canManage, experiencePointsThreshold, levelNumber } = this.props; diff --git a/client/app/bundles/course/level/index.jsx b/client/app/bundles/course/level/index.jsx index 2abd64131f4..d90759d5f91 100644 --- a/client/app/bundles/course/level/index.jsx +++ b/client/app/bundles/course/level/index.jsx @@ -1,11 +1,10 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import NotificationPopup from 'lib/containers/NotificationPopup'; import Level from 'course/level/pages/Level'; import storeCreator from './store'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('course-level'); if (mountNode) { diff --git a/client/app/bundles/course/level/pages/Level/index.jsx b/client/app/bundles/course/level/pages/Level/index.jsx index 6ddb95f9548..ae6eccd8b60 100644 --- a/client/app/bundles/course/level/pages/Level/index.jsx +++ b/client/app/bundles/course/level/pages/Level/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -90,7 +90,7 @@ const styles = { }, }; -class Level extends React.Component { +class Level extends Component { static renderTableHeader() { return ( @@ -107,43 +107,25 @@ class Level extends React.Component { ); } - constructor(props) { - super(props); - - this.handleUpdateExpThreshold = this.handleUpdateExpThreshold.bind(this); - this.handleLevelTextBlur = this.handleLevelTextBlur.bind(this); - this.handleCreateLevel = this.handleCreateLevel.bind(this); - this.handleDeleteLevel = this.handleDeleteLevel.bind(this); - this.handleSaveLevels = this.handleSaveLevels.bind(this); - } - componentDidMount() { this.props.dispatch(fetchLevels()); } - handleUpdateExpThreshold(levelNumber, newValue) { - this.props.dispatch(updateExpThreshold(levelNumber, newValue)); - } + handleCreateLevel = () => (e) => { + e.preventDefault(); + this.props.dispatch(addLevel()); + }; - handleLevelTextBlur() { - this.props.dispatch(sortLevels()); - } + handleDeleteLevel = (levelNumber) => (e) => { + e.preventDefault(); + this.props.dispatch(deleteLevel(levelNumber)); + }; - handleCreateLevel() { - return (e) => { - e.preventDefault(); - this.props.dispatch(addLevel()); - }; - } - - handleDeleteLevel(levelNumber) { - return (e) => { - e.preventDefault(); - this.props.dispatch(deleteLevel(levelNumber)); - }; - } + handleLevelTextBlur = () => { + this.props.dispatch(sortLevels()); + }; - handleSaveLevels() { + handleSaveLevels = () => { const { dispatch, levels } = this.props; return (e) => { e.preventDefault(); @@ -157,7 +139,11 @@ class Level extends React.Component { dispatch(saveLevels(levels, successMessage, failureMessage)); } }; - } + }; + + handleUpdateExpThreshold = (levelNumber, newValue) => { + this.props.dispatch(updateExpThreshold(levelNumber, newValue)); + }; // Only the first element of the levels prop should be 0 as it is the default threshold. // User input should not contain any zeroes for threshold. @@ -165,6 +151,34 @@ class Level extends React.Component { return this.props.levels.slice(1).some((element) => element === 0); } + renderBody() { + const { canManage, levels, isSaving } = this.props; + const rows = levels.slice(1).map((experiencePointsThreshold, index) => { + const key = `level-row-${index}`; + return ( + + ); + }); + + return ( +
+ + {Level.renderTableHeader()} + {rows} + {canManage && this.renderTableFooter()} +
+
+ ); + } + renderTableFooter() { const { isSaving } = this.props; @@ -202,34 +216,6 @@ class Level extends React.Component { ); } - renderBody() { - const { canManage, levels, isSaving } = this.props; - const rows = levels.slice(1).map((experiencePointsThreshold, index) => { - const key = `level-row-${index}`; - return ( - - ); - }); - - return ( -
- - {Level.renderTableHeader()} - {rows} - {canManage && this.renderTableFooter()} -
-
- ); - } - render() { return (
diff --git a/client/app/bundles/course/pages/UserEmailSubscriptions/__test__/index.test.js b/client/app/bundles/course/pages/UserEmailSubscriptions/__test__/index.test.js index 770bd353f1e..0e073d78435 100644 --- a/client/app/bundles/course/pages/UserEmailSubscriptions/__test__/index.test.js +++ b/client/app/bundles/course/pages/UserEmailSubscriptions/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import CourseAPI from 'api/course'; import storeCreator from 'course/store'; @@ -33,7 +32,7 @@ describe('', () => { ); const toggles = userEmailSubscriptions.find('Toggle'); - expect(toggles.length).toBe(1); + expect(toggles).toHaveLength(1); const toggle = toggles.last(); toggle.props().onToggle(null, true); diff --git a/client/app/bundles/course/pages/UserEmailSubscriptions/index.jsx b/client/app/bundles/course/pages/UserEmailSubscriptions/index.jsx index b0dfc73aa69..4f22c8d28ff 100644 --- a/client/app/bundles/course/pages/UserEmailSubscriptions/index.jsx +++ b/client/app/bundles/course/pages/UserEmailSubscriptions/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -31,7 +31,7 @@ const styles = { }, }; -class UserEmailSubscriptions extends React.Component { +class UserEmailSubscriptions extends Component { handleFetchAllUserEmailSubscriptions = () => { const { dispatch } = this.props; dispatch(fetchUserEmailSubscriptions()); @@ -90,6 +90,42 @@ class UserEmailSubscriptions extends React.Component { } } + renderEmailSettingsTable() { + const { userEmailSubscriptions } = this.props; + + if (userEmailSubscriptions.length === 0) { + return ( + + + + ); + } + + return ( + + + + + + + + + + + + + + + + + + + {userEmailSubscriptions.map((item) => this.renderRow(item))} + +
+ ); + } + renderRow(setting) { const componentTitle = setting.component_title ?? @@ -135,42 +171,6 @@ class UserEmailSubscriptions extends React.Component { ); } - renderEmailSettingsTable() { - const { userEmailSubscriptions } = this.props; - - if (userEmailSubscriptions.length === 0) { - return ( - - - - ); - } - - return ( - - - - - - - - - - - - - - - - - - - {userEmailSubscriptions.map((item) => this.renderRow(item))} - -
- ); - } - render() { this.unsubscribeViaEmailSuccessful(); return ( diff --git a/client/app/bundles/course/personal-times.js b/client/app/bundles/course/personal-times.js index b0258a22d0a..2d7429c7310 100644 --- a/client/app/bundles/course/personal-times.js +++ b/client/app/bundles/course/personal-times.js @@ -1,4 +1,4 @@ -$(document).ready(() => { +$(() => { $('.toggle-personal-time-btn').on('click', function () { $(`.toggle-personal-time-${$(this).data('id')}`).hide(); $(`.personal-time-${$(this).data('id')}`).removeClass('hidden'); diff --git a/client/app/bundles/course/statistics.js b/client/app/bundles/course/statistics.js index b02a77f6079..5316391a7dc 100644 --- a/client/app/bundles/course/statistics.js +++ b/client/app/bundles/course/statistics.js @@ -4,4 +4,4 @@ function initializeTabs() { $(MY_STUDENT_SELECTOR).tab('show'); } -$(document).ready(initializeTabs); +$(initializeTabs); diff --git a/client/app/bundles/course/survey/__test__/index.test.js b/client/app/bundles/course/survey/__test__/index.test.js index 65d962fb80a..597633adb8b 100644 --- a/client/app/bundles/course/survey/__test__/index.test.js +++ b/client/app/bundles/course/survey/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import { mount } from 'enzyme'; import MockAdapter from 'axios-mock-adapter'; @@ -48,7 +47,7 @@ describe('Surveys', () => { await sleep(1); expect(spyIndex).toHaveBeenCalled(); indexPage.update(); - expect(indexPage.find('AddButton').length).toBe(1); + expect(indexPage.find('AddButton')).toHaveLength(1); expect(indexPage.find('Table')).toHaveLength(1); }); }); diff --git a/client/app/bundles/course/survey/actions/__test__/responses.test.js b/client/app/bundles/course/survey/actions/__test__/responses.test.js index 04df79cafaa..50f0d0cf552 100644 --- a/client/app/bundles/course/survey/actions/__test__/responses.test.js +++ b/client/app/bundles/course/survey/actions/__test__/responses.test.js @@ -9,7 +9,7 @@ const mock = new MockAdapter(client); beforeEach(() => { mock.reset(); - history.push = jest.fn(); + jest.spyOn(history, 'push').mockImplementation(); }); const surveyId = '2'; diff --git a/client/app/bundles/course/survey/components/AddButton.jsx b/client/app/bundles/course/survey/components/AddButton.jsx index 5be9b2d2dcd..157bf36aaef 100644 --- a/client/app/bundles/course/survey/components/AddButton.jsx +++ b/client/app/bundles/course/survey/components/AddButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import FloatingActionButton from 'material-ui/FloatingActionButton'; import ContentAdd from 'material-ui/svg-icons/content/add'; diff --git a/client/app/bundles/course/survey/components/OptionsListItem.jsx b/client/app/bundles/course/survey/components/OptionsListItem.jsx index b6213e4c7ad..a600a33daab 100644 --- a/client/app/bundles/course/survey/components/OptionsListItem.jsx +++ b/client/app/bundles/course/survey/components/OptionsListItem.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { Card, CardText } from 'material-ui/Card'; import Thumbnail from 'lib/components/Thumbnail'; @@ -43,7 +43,7 @@ const styles = { }, }; -class OptionsListItem extends React.PureComponent { +class OptionsListItem extends PureComponent { renderGridCard() { const { optionText, imageUrl, widget } = this.props; return ( diff --git a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionForm.jsx b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionForm.jsx index f5ac848c75f..af3f3bbf54c 100644 --- a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionForm.jsx +++ b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionForm.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import { reduxForm, Field, FieldArray, Form } from 'redux-form'; @@ -139,24 +139,35 @@ const validate = (values) => { return errors; }; -class QuestionForm extends React.Component { - renderTiledViewToggle() { - const { intl, disabled } = this.props; +class QuestionForm extends Component { + renderMultipleChoiceFields() { return ( - <> - -

- {intl.formatMessage(questionFormTranslations.gridViewHint)} -

- +
+ {this.renderTiledViewToggle()} + {this.renderValidOptionCount()} + {this.renderOptionFields({ multipleChoice: true })} +
+ ); + } + + renderMultipleResponseFields() { + const { intl } = this.props; + return ( +
+ {this.renderTiledViewToggle()} +
+ {this.renderValidOptionCount()} + {this.renderNumberOfResponsesField( + 'min_options', + intl.formatMessage(translations.minOptions), + )} + {this.renderNumberOfResponsesField( + 'max_options', + intl.formatMessage(translations.maxOptions), + )} +
+ {this.renderOptionFields({ multipleResponse: true })} +
); } @@ -173,23 +184,19 @@ class QuestionForm extends React.Component { ); } - renderValidOptionCount() { - const { intl, formValues } = this.props; - const numberOfFilledOptions = formValues - ? // eslint-disable-next-line react/prop-types - countFilledOptions(formValues.options) - : 0; + renderOptionFields(props) { + const { disabled, addToOptionsToDelete } = this.props; return ( - +
+ {this.renderOptionsToDelete(props)} + +
); } @@ -222,63 +229,56 @@ class QuestionForm extends React.Component { return null; } - renderOptionFields(props) { - const { disabled, addToOptionsToDelete } = this.props; + renderSpecificFields(questionType) { + const { MULTIPLE_CHOICE, MULTIPLE_RESPONSE } = questionTypes; + const renderer = { + [MULTIPLE_CHOICE]: this.renderMultipleChoiceFields, + [MULTIPLE_RESPONSE]: this.renderMultipleResponseFields, + }[questionType]; - return ( -
- {this.renderOptionsToDelete(props)} - -
- ); + return renderer ? renderer.call(this) : null; } - renderMultipleChoiceFields() { + renderTiledViewToggle() { + const { intl, disabled } = this.props; return ( -
- {this.renderTiledViewToggle()} - {this.renderValidOptionCount()} - {this.renderOptionFields({ multipleChoice: true })} -
+ <> + +

+ {intl.formatMessage(questionFormTranslations.gridViewHint)} +

+ ); } - renderMultipleResponseFields() { - const { intl } = this.props; + renderValidOptionCount() { + const { intl, formValues } = this.props; + const numberOfFilledOptions = formValues + ? // eslint-disable-next-line react/prop-types + countFilledOptions(formValues.options) + : 0; + return ( -
- {this.renderTiledViewToggle()} -
- {this.renderValidOptionCount()} - {this.renderNumberOfResponsesField( - 'min_options', - intl.formatMessage(translations.minOptions), - )} - {this.renderNumberOfResponsesField( - 'max_options', - intl.formatMessage(translations.maxOptions), - )} -
- {this.renderOptionFields({ multipleResponse: true })} -
+ ); } - renderSpecificFields(questionType) { - const { MULTIPLE_CHOICE, MULTIPLE_RESPONSE } = questionTypes; - const renderer = { - [MULTIPLE_CHOICE]: this.renderMultipleChoiceFields, - [MULTIPLE_RESPONSE]: this.renderMultipleResponseFields, - }[questionType]; - - return renderer ? renderer.call(this) : null; - } - render() { const { handleSubmit, intl, onSubmit, disabled, formValues } = this.props; const { TEXT, MULTIPLE_CHOICE, MULTIPLE_RESPONSE } = questionTypes; diff --git a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormDeletedOptions.jsx b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormDeletedOptions.jsx index 82af4fe69ff..159307c5bd3 100644 --- a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormDeletedOptions.jsx +++ b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormDeletedOptions.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import Checkbox from 'material-ui/Checkbox'; import RadioButton from 'material-ui/RadioButton'; @@ -33,7 +33,7 @@ const styles = { }, }; -class QuestionFormDeletedOptions extends React.Component { +class QuestionFormDeletedOptions extends Component { renderWidget() { const { multipleResponse, multipleChoice } = this.props; let widget = null; diff --git a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOption.jsx b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOption.jsx index 25aea93dd44..360a685ead2 100644 --- a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOption.jsx +++ b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOption.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import { Field } from 'redux-form'; @@ -60,7 +60,7 @@ const styles = { }, }; -class QuestionFormOption extends React.Component { +class QuestionFormOption extends Component { renderImageField = (fieldProps) => { const { input, index, disabled } = fieldProps; const fieldId = `option-${index}-image-field`; diff --git a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOptions.jsx b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOptions.jsx index c8571a32b30..044a06fa789 100644 --- a/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOptions.jsx +++ b/client/app/bundles/course/survey/containers/QuestionFormDialogue/QuestionFormOptions.jsx @@ -1,5 +1,5 @@ /* eslint-disable react/no-array-index-key */ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import FlatButton from 'material-ui/FlatButton'; @@ -34,7 +34,7 @@ const optionsTranslations = defineMessages({ }, }); -class QuestionFormOptions extends React.Component { +class QuestionFormOptions extends Component { handleSelectFiles = (event) => { const { fields } = this.props; const options = fields.getAll(); diff --git a/client/app/bundles/course/survey/containers/QuestionFormDialogue/index.jsx b/client/app/bundles/course/survey/containers/QuestionFormDialogue/index.jsx index 719fb90e4a7..e041f1a7f18 100644 --- a/client/app/bundles/course/survey/containers/QuestionFormDialogue/index.jsx +++ b/client/app/bundles/course/survey/containers/QuestionFormDialogue/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; diff --git a/client/app/bundles/course/survey/containers/RespondButton/__test__/index.test.jsx b/client/app/bundles/course/survey/containers/RespondButton/__test__/index.test.jsx index dab3c0a4268..0d211df37e4 100644 --- a/client/app/bundles/course/survey/containers/RespondButton/__test__/index.test.jsx +++ b/client/app/bundles/course/survey/containers/RespondButton/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import CourseAPI from 'api/course'; import MockAdapter from 'axios-mock-adapter'; diff --git a/client/app/bundles/course/survey/containers/RespondButton/index.jsx b/client/app/bundles/course/survey/containers/RespondButton/index.jsx index b66834c6e6d..b9f3d286590 100644 --- a/client/app/bundles/course/survey/containers/RespondButton/index.jsx +++ b/client/app/bundles/course/survey/containers/RespondButton/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; diff --git a/client/app/bundles/course/survey/containers/ResponseForm/ResponseAnswer.jsx b/client/app/bundles/course/survey/containers/ResponseForm/ResponseAnswer.jsx index 8aaf329b33f..21008ede647 100644 --- a/client/app/bundles/course/survey/containers/ResponseForm/ResponseAnswer.jsx +++ b/client/app/bundles/course/survey/containers/ResponseForm/ResponseAnswer.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { Field } from 'redux-form'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; @@ -42,14 +42,15 @@ const responseFormTranslations = defineMessages({ }, }); -class ResponseAnswer extends React.Component { - static renderMultipleResponseOptions(props) { +class ResponseAnswer extends Component { + static renderMultipleChoiceOptions(props) { const { disabled, - input: { value, onChange }, + input: { onChange, value }, meta: { touched, dirty, error }, question: { grid_view: grid, options }, } = props; + const selectedOption = value && value.length > 0 && value[0]; return ( <> @@ -58,24 +59,18 @@ class ResponseAnswer extends React.Component { ) : null}
{options.map((option) => { + const { option: optionText, image_url: imageUrl } = option; + const id = option.id; const widget = ( - onChange([buttonValue])} + checked={id === selectedOption} disabled={disabled} - checked={value.indexOf(option.id) !== -1} - onCheck={(event, isChecked) => { - const newValue = [...value]; - if (isChecked) { - newValue.push(option.id); - } else { - newValue.splice(newValue.indexOf(option.id), 1); - } - return onChange(newValue); - }} /> ); - const { option: optionText, image_url: imageUrl } = option; return ( 0 && value[0]; return ( <> @@ -104,18 +98,24 @@ class ResponseAnswer extends React.Component { ) : null}
{options.map((option) => { - const { option: optionText, image_url: imageUrl } = option; - const id = option.id; const widget = ( - onChange([buttonValue])} - checked={id === selectedOption} disabled={disabled} + checked={value.indexOf(option.id) !== -1} + onCheck={(event, isChecked) => { + const newValue = [...value]; + if (isChecked) { + newValue.push(option.id); + } else { + newValue.splice(newValue.indexOf(option.id), 1); + } + return onChange(newValue); + }} /> ); + const { option: optionText, image_url: imageUrl } = option; return ( { + const { question, intl } = this.props; + return question.required && (!value || value.length < 1) + ? intl.formatMessage(responseFormTranslations.selectAtLeast, { count: 1 }) + : undefined; + }; - checkQuantitySelected(options) { + checkQuantitySelected = (options) => { const { question, intl } = this.props; const { required, @@ -162,41 +161,34 @@ class ResponseAnswer extends React.Component { } return undefined; - } + }; - checkMultipleChoiceRequired(value) { - const { question, intl } = this.props; - return question.required && (!value || value.length < 1) - ? intl.formatMessage(responseFormTranslations.selectAtLeast, { count: 1 }) - : undefined; - } - - checkTextResponseRequired(value) { + checkTextResponseRequired = (value) => { const { question } = this.props; return question.required && !value ? formTranslations.required : undefined; - } + }; - renderMultipleResponseField() { + renderMultipleChoiceField() { const { member, question, disabled } = this.props; return ( ); } - renderMultipleChoiceField() { + renderMultipleResponseField() { const { member, question, disabled } = this.props; return ( ); diff --git a/client/app/bundles/course/survey/containers/ResponseForm/ResponseSection.jsx b/client/app/bundles/course/survey/containers/ResponseForm/ResponseSection.jsx index f033aa63100..b2fb93f28b2 100644 --- a/client/app/bundles/course/survey/containers/ResponseForm/ResponseSection.jsx +++ b/client/app/bundles/course/survey/containers/ResponseForm/ResponseSection.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FieldArray } from 'redux-form'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -26,7 +26,7 @@ const translations = defineMessages({ }, }); -class ResponseSection extends React.Component { +class ResponseSection extends Component { static renderQuestions(props) { const { fields, disabled } = props; diff --git a/client/app/bundles/course/survey/containers/ResponseForm/__test__/index.test.jsx b/client/app/bundles/course/survey/containers/ResponseForm/__test__/index.test.jsx index 0409788a097..d0801d65754 100644 --- a/client/app/bundles/course/survey/containers/ResponseForm/__test__/index.test.jsx +++ b/client/app/bundles/course/survey/containers/ResponseForm/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import { MemoryRouter } from 'react-router-dom'; import storeCreator from 'course/survey/store'; @@ -153,14 +152,14 @@ describe('', () => { .find('div') .last() .text(); - expect(textResponseAnswerError).toEqual('Required'); + expect(textResponseAnswerError).toBe('Required'); const multipleChoiceAnswerError = multipleChoiceAnswer .find('renderMultipleChoiceOptions') .find('p') .first() .text(); - expect(multipleChoiceAnswerError).toEqual( + expect(multipleChoiceAnswerError).toBe( 'Please select at least 1 option(s).', ); @@ -169,7 +168,7 @@ describe('', () => { .find('p') .first() .text(); - expect(multipleResponseAnswerError).toEqual( + expect(multipleResponseAnswerError).toBe( 'Please select at most 2 option(s).', ); diff --git a/client/app/bundles/course/survey/containers/ResponseForm/index.jsx b/client/app/bundles/course/survey/containers/ResponseForm/index.jsx index 2e94f1529c4..7900aa38ea0 100644 --- a/client/app/bundles/course/survey/containers/ResponseForm/index.jsx +++ b/client/app/bundles/course/survey/containers/ResponseForm/index.jsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -76,7 +76,7 @@ export const buildResponsePayload = (data) => { return { response: { answers_attributes, submit: data.submit } }; }; -class ResponseForm extends React.Component { +class ResponseForm extends Component { static renderSections(props) { const { fields, disabled } = props; return ( diff --git a/client/app/bundles/course/survey/containers/SectionFormDialogue/SectionForm.jsx b/client/app/bundles/course/survey/containers/SectionFormDialogue/SectionForm.jsx index a3882d37119..da4f8729dff 100644 --- a/client/app/bundles/course/survey/containers/SectionFormDialogue/SectionForm.jsx +++ b/client/app/bundles/course/survey/containers/SectionFormDialogue/SectionForm.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import { reduxForm, Field, Form } from 'redux-form'; diff --git a/client/app/bundles/course/survey/containers/SectionFormDialogue/index.jsx b/client/app/bundles/course/survey/containers/SectionFormDialogue/index.jsx index 258d06d5377..b674f8d33c9 100644 --- a/client/app/bundles/course/survey/containers/SectionFormDialogue/index.jsx +++ b/client/app/bundles/course/survey/containers/SectionFormDialogue/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; diff --git a/client/app/bundles/course/survey/containers/SurveyFormDialogue/SurveyForm.jsx b/client/app/bundles/course/survey/containers/SurveyFormDialogue/SurveyForm.jsx index 4792572ad19..3c13453821e 100644 --- a/client/app/bundles/course/survey/containers/SurveyFormDialogue/SurveyForm.jsx +++ b/client/app/bundles/course/survey/containers/SurveyFormDialogue/SurveyForm.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, diff --git a/client/app/bundles/course/survey/containers/SurveyFormDialogue/index.jsx b/client/app/bundles/course/survey/containers/SurveyFormDialogue/index.jsx index e2bf856677d..0264db905bb 100644 --- a/client/app/bundles/course/survey/containers/SurveyFormDialogue/index.jsx +++ b/client/app/bundles/course/survey/containers/SurveyFormDialogue/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; diff --git a/client/app/bundles/course/survey/containers/SurveyLayout/AdminMenu.jsx b/client/app/bundles/course/survey/containers/SurveyLayout/AdminMenu.jsx index 51d0b235da7..f5835216f3e 100644 --- a/client/app/bundles/course/survey/containers/SurveyLayout/AdminMenu.jsx +++ b/client/app/bundles/course/survey/containers/SurveyLayout/AdminMenu.jsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; @@ -40,17 +40,19 @@ const translations = defineMessages({ }, }); -class AdminMenu extends React.Component { - updateSurveyHandler = (data) => { - const { dispatch, intl, surveyId } = this.props; - const { updateSurvey } = surveyActions; +class AdminMenu extends Component { + deleteSurveyHandler = () => { + const { survey, dispatch, intl, surveyId } = this.props; + const { deleteSurvey } = surveyActions; - const payload = formatSurveyFormData(data); - const successMessage = intl.formatMessage(translations.updateSuccess, data); - const failureMessage = intl.formatMessage(translations.updateFailure); - return dispatch( - updateSurvey(surveyId, payload, successMessage, failureMessage), + const successMessage = intl.formatMessage( + translations.deleteSuccess, + survey, ); + const failureMessage = intl.formatMessage(translations.deleteFailure); + const handleDelete = () => + dispatch(deleteSurvey(surveyId, successMessage, failureMessage)); + return dispatch(showDeleteConfirmation(handleDelete)); }; showEditSurveyForm = () => { @@ -93,18 +95,16 @@ class AdminMenu extends React.Component { ); }; - deleteSurveyHandler = () => { - const { survey, dispatch, intl, surveyId } = this.props; - const { deleteSurvey } = surveyActions; + updateSurveyHandler = (data) => { + const { dispatch, intl, surveyId } = this.props; + const { updateSurvey } = surveyActions; - const successMessage = intl.formatMessage( - translations.deleteSuccess, - survey, + const payload = formatSurveyFormData(data); + const successMessage = intl.formatMessage(translations.updateSuccess, data); + const failureMessage = intl.formatMessage(translations.updateFailure); + return dispatch( + updateSurvey(surveyId, payload, successMessage, failureMessage), ); - const failureMessage = intl.formatMessage(translations.deleteFailure); - const handleDelete = () => - dispatch(deleteSurvey(surveyId, successMessage, failureMessage)); - return dispatch(showDeleteConfirmation(handleDelete)); }; render() { diff --git a/client/app/bundles/course/survey/containers/SurveyLayout/__test__/AdminMenu.test.jsx b/client/app/bundles/course/survey/containers/SurveyLayout/__test__/AdminMenu.test.jsx index 791b00a49b5..d6a29b6ce79 100644 --- a/client/app/bundles/course/survey/containers/SurveyLayout/__test__/AdminMenu.test.jsx +++ b/client/app/bundles/course/survey/containers/SurveyLayout/__test__/AdminMenu.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-dom/test-utils'; import { mount } from 'enzyme'; diff --git a/client/app/bundles/course/survey/containers/SurveyLayout/__test__/index.test.jsx b/client/app/bundles/course/survey/containers/SurveyLayout/__test__/index.test.jsx index 918f430c25a..1a437056f26 100644 --- a/client/app/bundles/course/survey/containers/SurveyLayout/__test__/index.test.jsx +++ b/client/app/bundles/course/survey/containers/SurveyLayout/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import { Router } from 'react-router-dom'; import history from 'lib/history'; diff --git a/client/app/bundles/course/survey/containers/SurveyLayout/index.jsx b/client/app/bundles/course/survey/containers/SurveyLayout/index.jsx index 11b35815546..21cb9f03c6c 100644 --- a/client/app/bundles/course/survey/containers/SurveyLayout/index.jsx +++ b/client/app/bundles/course/survey/containers/SurveyLayout/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Route, Switch } from 'react-router-dom'; @@ -27,7 +27,7 @@ const backLocations = (courseId, surveyId, Page) => { } }; -class SurveyLayout extends React.Component { +class SurveyLayout extends Component { static renderTitleBar(survey, surveyId, showAdminMenu, backLocation) { return ( ', () => { // Include phantom students in statistics const statsCard = responseIndex.find('Card').last(); const submittedChip = statsCard.find('Chip').last(); - expect(submittedChip.text()).toEqual('0 Submitted'); + expect(submittedChip.text()).toBe('0 Submitted'); statsCard.find('Toggle').first().props().onToggle(null, true); - expect(submittedChip.text()).toEqual('2 Submitted'); + expect(submittedChip.text()).toBe('2 Submitted'); }); }); diff --git a/client/app/bundles/course/survey/pages/ResponseIndex/index.jsx b/client/app/bundles/course/survey/pages/ResponseIndex/index.jsx index 206d732faea..3016d40405c 100644 --- a/client/app/bundles/course/survey/pages/ResponseIndex/index.jsx +++ b/client/app/bundles/course/survey/pages/ResponseIndex/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import moment, { formatLongDateTime } from 'lib/moment'; @@ -94,7 +94,7 @@ const translations = defineMessages({ }, }); -class ResponseIndex extends React.Component { +class ResponseIndex extends Component { static computeStatuses(responses) { const summary = { [responseStatus.NOT_STARTED]: 0, @@ -119,6 +119,21 @@ class ResponseIndex extends React.Component { return { responses: responsesWithStatuses, summary }; } + static renderPhantomTable(responses, survey) { + if (responses.length < 1) { + return null; + } + + return ( +
+

+ +

+ {ResponseIndex.renderTable(responses, survey)} +
+ ); + } + static renderReponseStatus(response, survey) { const status = ; if (response.status === responseStatus.NOT_STARTED) { @@ -138,17 +153,6 @@ class ResponseIndex extends React.Component { return submittedAt; } - static renderUpdatedAt(response, survey) { - if (!response.submitted_at) { - return null; - } - const updatedAt = formatLongDateTime(response.updated_at); - if (survey.end_at && moment(response.updated_at).isAfter(survey.end_at)) { - return
{updatedAt}
; - } - return updatedAt; - } - static renderTable(responses, survey) { return ( @@ -199,19 +203,15 @@ class ResponseIndex extends React.Component { ); } - static renderPhantomTable(responses, survey) { - if (responses.length < 1) { + static renderUpdatedAt(response, survey) { + if (!response.submitted_at) { return null; } - - return ( -
-

- -

- {ResponseIndex.renderTable(responses, survey)} -
- ); + const updatedAt = formatLongDateTime(response.updated_at); + if (survey.end_at && moment(response.updated_at).isAfter(survey.end_at)) { + return
{updatedAt}
; + } + return updatedAt; } constructor(props) { @@ -226,6 +226,41 @@ class ResponseIndex extends React.Component { dispatch(fetchResponses()); } + renderBody() { + const { survey, responses, isLoading } = this.props; + if (isLoading) { + return ; + } + + const { realResponses, phantomResponses } = responses.reduce( + (categories, response) => { + const cateogry = response.course_user.phantom + ? 'phantomResponses' + : 'realResponses'; + categories[cateogry].push(response); + return categories; + }, + { realResponses: [], phantomResponses: [] }, + ); + + const { + responses: realResponsesWithStatuses, + summary: realResponsesStatuses, + } = ResponseIndex.computeStatuses(realResponses); + const { + responses: phantomResponsesWithStatuses, + summary: phantomResponsesStatuses, + } = ResponseIndex.computeStatuses(phantomResponses); + + return ( +
+ {this.renderStats(realResponsesStatuses, phantomResponsesStatuses)} + {ResponseIndex.renderTable(realResponsesWithStatuses, survey)} + {ResponseIndex.renderPhantomTable(phantomResponsesWithStatuses, survey)} +
+ ); + } + renderHeader() { const { survey } = this.props; return ( @@ -303,41 +338,6 @@ class ResponseIndex extends React.Component { ); } - renderBody() { - const { survey, responses, isLoading } = this.props; - if (isLoading) { - return ; - } - - const { realResponses, phantomResponses } = responses.reduce( - (categories, response) => { - const cateogry = response.course_user.phantom - ? 'phantomResponses' - : 'realResponses'; - categories[cateogry].push(response); - return categories; - }, - { realResponses: [], phantomResponses: [] }, - ); - - const { - responses: realResponsesWithStatuses, - summary: realResponsesStatuses, - } = ResponseIndex.computeStatuses(realResponses); - const { - responses: phantomResponsesWithStatuses, - summary: phantomResponsesStatuses, - } = ResponseIndex.computeStatuses(phantomResponses); - - return ( -
- {this.renderStats(realResponsesStatuses, phantomResponsesStatuses)} - {ResponseIndex.renderTable(realResponsesWithStatuses, survey)} - {ResponseIndex.renderPhantomTable(phantomResponsesWithStatuses, survey)} -
- ); - } - render() { return (
diff --git a/client/app/bundles/course/survey/pages/ResponseShow/__test__/index.test.jsx b/client/app/bundles/course/survey/pages/ResponseShow/__test__/index.test.jsx index 868eda59a5c..c771503e4d8 100644 --- a/client/app/bundles/course/survey/pages/ResponseShow/__test__/index.test.jsx +++ b/client/app/bundles/course/survey/pages/ResponseShow/__test__/index.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount, shallow } from 'enzyme'; import { MemoryRouter } from 'react-router-dom'; import CourseAPI from 'api/course'; diff --git a/client/app/bundles/course/survey/pages/ResponseShow/index.jsx b/client/app/bundles/course/survey/pages/ResponseShow/index.jsx index 55bd271ff78..9d79e9fed41 100644 --- a/client/app/bundles/course/survey/pages/ResponseShow/index.jsx +++ b/client/app/bundles/course/survey/pages/ResponseShow/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -36,7 +36,7 @@ const styles = { }, }; -class ResponseShow extends React.Component { +class ResponseShow extends Component { componentDidMount() { const { dispatch, @@ -47,40 +47,6 @@ class ResponseShow extends React.Component { dispatch(fetchResponse(responseId)); } - renderSubmissionInfo() { - const { response } = this.props; - return ( -
- - - Student - {response.creator_name} - - - Submitted At - - {response.submitted_at ? ( - formatLongDateTime(response.submitted_at) - ) : ( - - )} - - - - Last Updated At - - {response.submitted_at ? ( - formatLongDateTime(response.updated_at) - ) : ( - - )} - - - -
- ); - } - renderBody() { const { survey, response, flags } = this.props; if (flags.isLoading) { @@ -124,6 +90,40 @@ class ResponseShow extends React.Component { ); } + renderSubmissionInfo() { + const { response } = this.props; + return ( + + + + Student + {response.creator_name} + + + Submitted At + + {response.submitted_at ? ( + formatLongDateTime(response.submitted_at) + ) : ( + + )} + + + + Last Updated At + + {response.submitted_at ? ( + formatLongDateTime(response.updated_at) + ) : ( + + )} + + + +
+ ); + } + renderUnsubmitButton() { const { response, diff --git a/client/app/bundles/course/survey/pages/SurveyIndex/NewSurveyButton.jsx b/client/app/bundles/course/survey/pages/SurveyIndex/NewSurveyButton.jsx index a640b49b631..a63d74e831f 100644 --- a/client/app/bundles/course/survey/pages/SurveyIndex/NewSurveyButton.jsx +++ b/client/app/bundles/course/survey/pages/SurveyIndex/NewSurveyButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; @@ -38,7 +38,7 @@ const aWeekStartingTomorrow = () => { }; }; -class NewSurveyButton extends React.Component { +class NewSurveyButton extends Component { createSurveyHandler = (data) => { const { dispatch, intl } = this.props; diff --git a/client/app/bundles/course/survey/pages/SurveyIndex/SurveysTable.jsx b/client/app/bundles/course/survey/pages/SurveyIndex/SurveysTable.jsx index c9c9e2e9405..de3bd61b76e 100644 --- a/client/app/bundles/course/survey/pages/SurveyIndex/SurveysTable.jsx +++ b/client/app/bundles/course/survey/pages/SurveyIndex/SurveysTable.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; @@ -37,7 +37,7 @@ const styles = { }, }; -class SurveysTable extends React.Component { +class SurveysTable extends Component { renderPublishToggle(survey) { const { dispatch } = this.props; if (!survey.canUpdate) { diff --git a/client/app/bundles/course/survey/pages/SurveyIndex/__test__/NewSurveyButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyIndex/__test__/NewSurveyButton.test.jsx index e9b82237950..a905c48bc3d 100644 --- a/client/app/bundles/course/survey/pages/SurveyIndex/__test__/NewSurveyButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyIndex/__test__/NewSurveyButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { mount } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; @@ -36,7 +35,7 @@ describe('', () => { }; const startAt = '01-01-2017'; - const startTime = '12:00 AM'; + const startTime = '00:00'; const dialogInline = surveyFormDialogue .find('RenderToLayer') .first() diff --git a/client/app/bundles/course/survey/pages/SurveyIndex/index.jsx b/client/app/bundles/course/survey/pages/SurveyIndex/index.jsx index b31bedb8276..8f7d6dba089 100644 --- a/client/app/bundles/course/survey/pages/SurveyIndex/index.jsx +++ b/client/app/bundles/course/survey/pages/SurveyIndex/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -18,7 +18,7 @@ const translations = defineMessages({ }, }); -class SurveyIndex extends React.Component { +class SurveyIndex extends Component { componentDidMount() { const { dispatch } = this.props; dispatch(fetchSurveys()); diff --git a/client/app/bundles/course/survey/pages/SurveyResults/OptionsQuestionResults.jsx b/client/app/bundles/course/survey/pages/SurveyResults/OptionsQuestionResults.jsx index 9c1a5d5fae3..3944bd07ccf 100644 --- a/client/app/bundles/course/survey/pages/SurveyResults/OptionsQuestionResults.jsx +++ b/client/app/bundles/course/survey/pages/SurveyResults/OptionsQuestionResults.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -132,43 +132,7 @@ const translations = defineMessages({ }, }); -class OptionsQuestionResults extends React.Component { - static renderPercentageBar(percentage) { - return ( -
-
- {percentage >= styles.percentageBarThreshold - ? `${percentage.toFixed(1)}%` - : null} -
- {percentage < styles.percentageBarThreshold ? ( - {`${percentage.toFixed(1)}%`} - ) : null} -
- ); - } - - static renderStudentList(students) { - return ( -
- {students.map((student) => ( - - - {student.phantom ? ( - - ) : ( - student.name - )} - - - ))} -
- ); - } - +class OptionsQuestionResults extends Component { static renderOptionRow(breakdown, hasImage, option, index, anonymous) { const percentage = (100 * breakdown[option.id].count) / breakdown.length; const { @@ -207,6 +171,42 @@ class OptionsQuestionResults extends React.Component { ); } + static renderPercentageBar(percentage) { + return ( +
+
+ {percentage >= styles.percentageBarThreshold + ? `${percentage.toFixed(1)}%` + : null} +
+ {percentage < styles.percentageBarThreshold ? ( + {`${percentage.toFixed(1)}%`} + ) : null} +
+ ); + } + + static renderStudentList(students) { + return ( +
+ {students.map((student) => ( + + + {student.phantom ? ( + + ) : ( + student.name + )} + + + ))} +
+ ); + } + constructor(props) { super(props); diff --git a/client/app/bundles/course/survey/pages/SurveyResults/ResultsQuestion.jsx b/client/app/bundles/course/survey/pages/SurveyResults/ResultsQuestion.jsx index d5f4660ea29..a0876a0e8f8 100644 --- a/client/app/bundles/course/survey/pages/SurveyResults/ResultsQuestion.jsx +++ b/client/app/bundles/course/survey/pages/SurveyResults/ResultsQuestion.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { Card, CardText } from 'material-ui/Card'; import { FormattedMessage } from 'react-intl'; @@ -17,16 +17,7 @@ const styles = { }, }; -class ResultsQuestion extends React.Component { - renderTextResults() { - const { - includePhantoms, - question: { answers }, - anonymous, - } = this.props; - return ; - } - +class ResultsQuestion extends Component { renderOptionsResults() { const { question: { options, answers, question_type: questionType }, @@ -55,6 +46,15 @@ class ResultsQuestion extends React.Component { return renderer.call(this); } + renderTextResults() { + const { + includePhantoms, + question: { answers }, + anonymous, + } = this.props; + return ; + } + render() { const { question, index } = this.props; diff --git a/client/app/bundles/course/survey/pages/SurveyResults/ResultsSection.jsx b/client/app/bundles/course/survey/pages/SurveyResults/ResultsSection.jsx index 86de178c73e..24b8cd3c0b0 100644 --- a/client/app/bundles/course/survey/pages/SurveyResults/ResultsSection.jsx +++ b/client/app/bundles/course/survey/pages/SurveyResults/ResultsSection.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Card, CardText, CardTitle } from 'material-ui/Card'; import { sectionShape } from 'course/survey/propTypes'; diff --git a/client/app/bundles/course/survey/pages/SurveyResults/TextResponseResults.jsx b/client/app/bundles/course/survey/pages/SurveyResults/TextResponseResults.jsx index 55babdeb49b..86d81e4159f 100644 --- a/client/app/bundles/course/survey/pages/SurveyResults/TextResponseResults.jsx +++ b/client/app/bundles/course/survey/pages/SurveyResults/TextResponseResults.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -54,7 +54,7 @@ const translations = defineMessages({ }, }); -class TextResponseResults extends React.Component { +class TextResponseResults extends Component { static renderStudentName(answer) { return ( diff --git a/client/app/bundles/course/survey/pages/SurveyResults/__test__/ResultsQuestion.test.jsx b/client/app/bundles/course/survey/pages/SurveyResults/__test__/ResultsQuestion.test.jsx index 36227b6934a..119536648ac 100644 --- a/client/app/bundles/course/survey/pages/SurveyResults/__test__/ResultsQuestion.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyResults/__test__/ResultsQuestion.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import { MemoryRouter } from 'react-router-dom'; import storeCreator from 'course/survey/store'; diff --git a/client/app/bundles/course/survey/pages/SurveyResults/__test__/index.test.js b/client/app/bundles/course/survey/pages/SurveyResults/__test__/index.test.js index 27830336b9c..0b4d6f3d46c 100644 --- a/client/app/bundles/course/survey/pages/SurveyResults/__test__/index.test.js +++ b/client/app/bundles/course/survey/pages/SurveyResults/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import { connect } from 'react-redux'; import { MemoryRouter } from 'react-router-dom'; diff --git a/client/app/bundles/course/survey/pages/SurveyResults/index.jsx b/client/app/bundles/course/survey/pages/SurveyResults/index.jsx index 5c00a7ae1dd..ab7a4902309 100644 --- a/client/app/bundles/course/survey/pages/SurveyResults/index.jsx +++ b/client/app/bundles/course/survey/pages/SurveyResults/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -30,7 +30,7 @@ const translations = defineMessages({ }, }); -class SurveyResults extends React.Component { +class SurveyResults extends Component { constructor(props) { super(props); this.state = { includePhantoms: true }; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/DownloadResponsesButton.jsx b/client/app/bundles/course/survey/pages/SurveyShow/DownloadResponsesButton.jsx index bd9d3393608..6ea1ced0bda 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/DownloadResponsesButton.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/DownloadResponsesButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -18,19 +17,15 @@ const styles = { }, }; -class DownloadResponsesButton extends React.Component { - render() { - return ( - <> - } - onClick={() => this.props.dispatch(downloadSurvey())} - style={styles.button} - /> - - ); - } -} +const DownloadResponsesButton = ({ dispatch }) => ( + <> + } + onClick={() => dispatch(downloadSurvey())} + style={styles.button} + /> + +); DownloadResponsesButton.propTypes = { dispatch: PropTypes.func.isRequired, diff --git a/client/app/bundles/course/survey/pages/SurveyShow/NewSectionButton.jsx b/client/app/bundles/course/survey/pages/SurveyShow/NewSectionButton.jsx index 1636a788d0b..30cb4c9b21d 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/NewSectionButton.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/NewSectionButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { @@ -34,7 +34,7 @@ const styles = { }, }; -class NewSectionButton extends React.Component { +class NewSectionButton extends Component { createSectionHandler = (data) => { const { dispatch } = this.props; const payload = { section: data }; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/DeleteSectionButton.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/DeleteSectionButton.jsx index f5eaf1541bb..139f77a135e 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/DeleteSectionButton.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/DeleteSectionButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -21,7 +21,7 @@ const translations = defineMessages({ }, }); -class DeleteSectionButton extends React.PureComponent { +class DeleteSectionButton extends PureComponent { deleteSectionHandler = () => { const { dispatch, sectionId } = this.props; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/EditSectionButton.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/EditSectionButton.jsx index 3bb3c6f0f5d..5efd8d8c5d9 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/EditSectionButton.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/EditSectionButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { @@ -29,17 +29,7 @@ const translations = defineMessages({ }, }); -class EditSectionButton extends React.Component { - updateSectionHandler = (data) => { - const { dispatch, section } = this.props; - const payload = { section: data }; - const successMessage = ; - const failureMessage = ; - return dispatch( - updateSurveySection(section.id, payload, successMessage, failureMessage), - ); - }; - +class EditSectionButton extends Component { showEditSectionForm = () => { const { dispatch, @@ -55,6 +45,16 @@ class EditSectionButton extends React.Component { ); }; + updateSectionHandler = (data) => { + const { dispatch, section } = this.props; + const payload = { section: data }; + const successMessage = ; + const failureMessage = ; + return dispatch( + updateSurveySection(section.id, payload, successMessage, failureMessage), + ); + }; + render() { return ( { const { dispatch, sectionIndex } = this.props; const successMessage = ; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/MoveUpButton.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/MoveUpButton.jsx index c08738bd838..2ac328b4d43 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/MoveUpButton.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/MoveUpButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { defineMessages, FormattedMessage } from 'react-intl'; @@ -20,7 +20,7 @@ const translations = defineMessages({ }, }); -class MoveUpButton extends React.Component { +class MoveUpButton extends Component { moveSectionUp = () => { const { dispatch, sectionIndex } = this.props; const successMessage = ; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/NewQuestionButton.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/NewQuestionButton.jsx index 13daa5b7361..8c914d25f88 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/NewQuestionButton.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/NewQuestionButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { @@ -34,7 +34,7 @@ const translations = defineMessages({ }, }); -class NewQuestionButton extends React.Component { +class NewQuestionButton extends Component { createQuestionHandler = (data) => { const { dispatch } = this.props; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/Question.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/Question.jsx index 87b1906a34c..e768e9fbfbd 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/Question.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/Question.jsx @@ -1,5 +1,5 @@ /* eslint-disable new-cap */ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; import { connect } from 'react-redux'; @@ -46,17 +46,16 @@ const translations = defineMessages({ }, }); -class Question extends React.Component { - updateQuestionHandler = (data) => { - const { dispatch, intl } = this.props; - const { updateSurveyQuestion } = questionActions; +class Question extends Component { + deleteQuestionHandler = () => { + const { dispatch, question, intl } = this.props; + const { deleteSurveyQuestion } = questionActions; - const payload = formatQuestionFormData(data); - const successMessage = intl.formatMessage(translations.updateSuccess); - const failureMessage = intl.formatMessage(translations.updateFailure); - return dispatch( - updateSurveyQuestion(data.id, payload, successMessage, failureMessage), - ); + const successMessage = intl.formatMessage(translations.deleteSuccess); + const failureMessage = intl.formatMessage(translations.deleteFailure); + const handleDelete = () => + dispatch(deleteSurveyQuestion(question, successMessage, failureMessage)); + return dispatch(showDeleteConfirmation(handleDelete)); }; showEditQuestionForm = () => { @@ -75,15 +74,16 @@ class Question extends React.Component { ); }; - deleteQuestionHandler = () => { - const { dispatch, question, intl } = this.props; - const { deleteSurveyQuestion } = questionActions; + updateQuestionHandler = (data) => { + const { dispatch, intl } = this.props; + const { updateSurveyQuestion } = questionActions; - const successMessage = intl.formatMessage(translations.deleteSuccess); - const failureMessage = intl.formatMessage(translations.deleteFailure); - const handleDelete = () => - dispatch(deleteSurveyQuestion(question, successMessage, failureMessage)); - return dispatch(showDeleteConfirmation(handleDelete)); + const payload = formatQuestionFormData(data); + const successMessage = intl.formatMessage(translations.updateSuccess); + const failureMessage = intl.formatMessage(translations.updateFailure); + return dispatch( + updateSurveyQuestion(data.id, payload, successMessage, failureMessage), + ); }; adminFunctions() { @@ -190,9 +190,7 @@ const questionTarget = { } // Only perform the move when source question has been dragged past half of the target question - const hoverBoundingRect = component - .getDecoratedComponentInstance() - .DOMNode.getBoundingClientRect(); + const hoverBoundingRect = component.DOMNode.getBoundingClientRect(); const hoverMiddleY = (hoverBoundingRect.bottom + hoverBoundingRect.top) / 2; const pointerY = monitor.getClientOffset().y; const draggedUpwardPastMidLine = diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/QuestionCard.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/QuestionCard.jsx index 5ab959393a3..055f6190b23 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/QuestionCard.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/QuestionCard.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import { Card, CardText } from 'material-ui/Card'; @@ -51,22 +51,19 @@ const styles = { }, }; -class QuestionCard extends React.Component { - static renderOptionsList(question, Widget) { - return ( - <> - {question.options.map((option) => { - const { option: optionText, image_url: imageUrl } = option; - const widget = ; - return ( - - ); - })} - - ); +class QuestionCard extends Component { + static renderOptionsFields(question) { + const { MULTIPLE_CHOICE, MULTIPLE_RESPONSE } = questionTypes; + const widget = { + [MULTIPLE_CHOICE]: RadioButton, + [MULTIPLE_RESPONSE]: Checkbox, + }[question.question_type]; + if (!widget) { + return null; + } + return question.grid_view + ? QuestionCard.renderOptionsGrid(question, widget) + : QuestionCard.renderOptionsList(question, widget); } static renderOptionsGrid(question, Widget) { @@ -93,18 +90,29 @@ class QuestionCard extends React.Component { ); } - static renderOptionsFields(question) { - const { MULTIPLE_CHOICE, MULTIPLE_RESPONSE } = questionTypes; - const widget = { - [MULTIPLE_CHOICE]: RadioButton, - [MULTIPLE_RESPONSE]: Checkbox, - }[question.question_type]; - if (!widget) { - return null; + static renderOptionsList(question, Widget) { + return ( + <> + {question.options.map((option) => { + const { option: optionText, image_url: imageUrl } = option; + const widget = ; + return ( + + ); + })} + + ); + } + + static renderSpecificFields(question) { + const { TEXT } = questionTypes; + if (question.question_type === TEXT) { + return QuestionCard.renderTextField(); } - return question.grid_view - ? QuestionCard.renderOptionsGrid(question, widget) - : QuestionCard.renderOptionsList(question, widget); + return QuestionCard.renderOptionsFields(question); } static renderTextField() { @@ -117,14 +125,6 @@ class QuestionCard extends React.Component { ); } - static renderSpecificFields(question) { - const { TEXT } = questionTypes; - if (question.question_type === TEXT) { - return QuestionCard.renderTextField(); - } - return QuestionCard.renderOptionsFields(question); - } - constructor(props) { super(props); this.state = { hovered: false }; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/SectionCard.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/SectionCard.jsx index c6b74e995e3..35bab383e01 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/SectionCard.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/SectionCard.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { Card, CardText, CardTitle, CardActions } from 'material-ui/Card'; @@ -29,7 +29,7 @@ const translations = defineMessages({ }, }); -class SectionCard extends React.Component { +class SectionCard extends Component { constructor(props) { super(props); this.state = { expanded: true }; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/DeleteSectionButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/DeleteSectionButton.test.jsx index 61ab8a92bfd..b165b28dfff 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/DeleteSectionButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/DeleteSectionButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-dom/test-utils'; import { mount } from 'enzyme'; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/EditSectionButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/EditSectionButton.test.jsx index 38d87000e67..c6b94c23c66 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/EditSectionButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/EditSectionButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { mount } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveDownButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveDownButton.test.jsx index dbf37f26b86..23be0519a47 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveDownButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveDownButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import CourseAPI from 'api/course'; import storeCreator from 'course/survey/store'; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveUpButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveUpButton.test.jsx index ca233aaab63..7b51797913b 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveUpButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/MoveUpButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import CourseAPI from 'api/course'; import storeCreator from 'course/survey/store'; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/NewQuestionButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/NewQuestionButton.test.jsx index cce1e2462af..d7381848bdb 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/NewQuestionButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/__test__/NewQuestionButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-dom/test-utils'; import { mount } from 'enzyme'; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/Section/index.jsx b/client/app/bundles/course/survey/pages/SurveyShow/Section/index.jsx index 3c7a6ef0338..09b7c782c28 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/Section/index.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/Section/index.jsx @@ -1,5 +1,5 @@ /* eslint-disable new-cap */ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { DropTarget } from 'react-dnd'; @@ -7,7 +7,7 @@ import { draggableTypes } from 'course/survey/constants'; import { changeSection } from 'course/survey/actions/questions'; import SectionCard from './SectionCard'; -class Section extends React.Component { +class Section extends Component { render() { return this.props.connectDropTarget(
{ const { dispatch, survey } = this.props; dispatch( diff --git a/client/app/bundles/course/survey/pages/SurveyShow/__test__/DownloadResponsesButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/__test__/DownloadResponsesButton.test.jsx index 522a705efaa..18f32a5b930 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/__test__/DownloadResponsesButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/__test__/DownloadResponsesButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import CourseAPI from 'api/course'; import storeCreator from 'course/survey/store'; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/__test__/NewSectionButton.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/__test__/NewSectionButton.test.jsx index d801295c3f3..0259b4afc06 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/__test__/NewSectionButton.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/__test__/NewSectionButton.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import ReactDOM from 'react-dom'; import { mount } from 'enzyme'; import ReactTestUtils from 'react-dom/test-utils'; diff --git a/client/app/bundles/course/survey/pages/SurveyShow/__test__/index.test.jsx b/client/app/bundles/course/survey/pages/SurveyShow/__test__/index.test.jsx index 0575a3ce1ba..47e55ad7b0c 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/__test__/index.test.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/__test__/index.test.jsx @@ -1,11 +1,10 @@ -/* eslint-disable new-cap */ -import React from 'react'; import { mount } from 'enzyme'; import { connect } from 'react-redux'; -import CourseAPI from 'api/course'; +import { TestBackend } from 'react-dnd-test-backend'; +import { createDragDropManager } from 'dnd-core'; import MockAdapter from 'axios-mock-adapter'; -import TestBackend from 'react-dnd-test-backend'; -import { DragDropContext } from 'react-dnd'; + +import CourseAPI from 'api/course'; import storeCreator from 'course/survey/store'; import { ConnectedSurveyShow } from '../index'; @@ -66,18 +65,17 @@ const surveyData = { }; /** - * Wraps a component into a DragDropContext that uses the TestBackend. + * Injects TestBackend into a SurveyShow component. */ -function wrapInTestContext(DecoratedComponent) { - class TestContextContainer extends React.Component { - render() { - return ; - } - } - const mapStateToProps = (state) => ({ survey: state.surveys[0] || {} }); - return connect(mapStateToProps)( - DragDropContext(TestBackend)(TestContextContainer), +function getSurveyShowWithTestBackend() { + const manager = createDragDropManager(TestBackend); + + const SurveyShowWithTestBackend = (props) => ( + ); + + const mapStateToProps = (state) => ({ survey: state.surveys[0] || {} }); + return [connect(mapStateToProps)(SurveyShowWithTestBackend), manager]; } beforeEach(() => { @@ -98,9 +96,9 @@ describe('', () => { // Mount showPage and wait for survey data to load window.history.pushState({}, '', surveyUrl); const store = storeCreator({ surveys: {} }); - const WrappedSurveyShow = wrapInTestContext(ConnectedSurveyShow); + const [SurveyShowWithTestBackend, manager] = getSurveyShowWithTestBackend(); const showPage = mount( - , buildContextOptions(store), @@ -123,7 +121,9 @@ describe('', () => { .instance() .getDecoratedComponentInstance() .getDecoratedComponentInstance().DOMNode; - targetQuestionDOMNode.getBoundingClientRect = jest.fn(); + jest + .spyOn(targetQuestionDOMNode, 'getBoundingClientRect') + .mockImplementation(); targetQuestionDOMNode.getBoundingClientRect.mockReturnValue({ bottom: 200, height: 100, @@ -134,13 +134,7 @@ describe('', () => { }); // Simulate dragging first question down past the mid-line of the second question - const dragDropContext = showPage - .find('DragDropContext(TestContextContainer)') - .first(); - const dragDropBackend = dragDropContext - .instance() - .getManager() - .getBackend(); + const dragDropBackend = manager.getBackend(); const sourceQuestionHandlerId = sourceQuestion .instance() .getDecoratedComponentInstance() @@ -173,7 +167,9 @@ describe('', () => { const targetSectionDOMNode = tragetSection .instance() .getDecoratedComponentInstance().DOMNode; - targetSectionDOMNode.getBoundingClientRect = jest.fn(); + jest + .spyOn(targetSectionDOMNode, 'getBoundingClientRect') + .mockImplementation(); targetSectionDOMNode.getBoundingClientRect.mockReturnValue({ bottom: 400, height: 100, @@ -185,13 +181,13 @@ describe('', () => { // Continue dragging question down into the next section const targetSectionHandlerId = tragetSection.instance().getHandlerId(); - expect(sections.first().props().section.questions.length).toBe(2); - expect(sections.last().props().section.questions.length).toBe(0); + expect(sections.first().props().section.questions).toHaveLength(2); + expect(sections.last().props().section.questions).toHaveLength(0); dragDropBackend.simulateHover([], { clientOffset: { x: 0, y: 350 } }); dragDropBackend.simulateHover([targetSectionHandlerId]); updateSections(); - expect(sections.first().props().section.questions.length).toBe(1); - expect(sections.last().props().section.questions.length).toBe(1); + expect(sections.first().props().section.questions).toHaveLength(1); + expect(sections.last().props().section.questions).toHaveLength(1); // Ordering should be saved on end drag dragDropBackend.simulateEndDrag(); diff --git a/client/app/bundles/course/survey/pages/SurveyShow/index.jsx b/client/app/bundles/course/survey/pages/SurveyShow/index.jsx index b8362d48901..b4d5cc49e33 100644 --- a/client/app/bundles/course/survey/pages/SurveyShow/index.jsx +++ b/client/app/bundles/course/survey/pages/SurveyShow/index.jsx @@ -1,10 +1,10 @@ -/* eslint-disable new-cap */ -import React from 'react'; +import { useEffect, useMemo } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; -import { DragDropContext } from 'react-dnd'; -import HTML5Backend from 'react-dnd-html5-backend'; +import { DndProvider } from 'react-dnd'; +import { HTML5Backend } from 'react-dnd-html5-backend'; +import { createDragDropManager } from 'dnd-core'; import Subheader from 'material-ui/Subheader'; import surveyTranslations from 'course/survey/translations'; import { surveyShape } from 'course/survey/propTypes'; @@ -20,14 +20,26 @@ const translations = defineMessages({ }, }); -class SurveyShow extends React.Component { - componentDidMount() { - const { dispatch, surveyId } = this.props; +const SurveyShow = ({ + dispatch, + surveyId, + isLoading, + disabled, + intl, + survey, + courseId, + manager, +}) => { + useEffect(() => { dispatch(surveyActions.fetchSurvey(surveyId)); - } + }, [dispatch, surveyId]); - renderBody(survey) { - const { intl, isLoading, disabled } = this.props; + const managerToUse = useMemo( + () => manager ?? createDragDropManager(HTML5Backend), + [manager], + ); + + const renderBody = () => { const { sections, canUpdate } = survey; if (isLoading) { return ; @@ -55,18 +67,15 @@ class SurveyShow extends React.Component { ))} ); - } + }; - render() { - const { survey, disabled, courseId } = this.props; - return ( - <> - - {this.renderBody(survey)} - - ); - } -} + return ( + + + {renderBody(survey)} + + ); +}; SurveyShow.propTypes = { dispatch: PropTypes.func.isRequired, @@ -76,6 +85,9 @@ SurveyShow.propTypes = { disabled: PropTypes.bool.isRequired, courseId: PropTypes.string.isRequired, surveyId: PropTypes.string.isRequired, + + // Used for injecting dependencies for testing DnD + manager: PropTypes.object, }; const mapStateToProps = (state) => ({ @@ -85,4 +97,4 @@ const mapStateToProps = (state) => ({ export const ConnectedSurveyShow = connect(mapStateToProps)( injectIntl(SurveyShow), ); -export default DragDropContext(HTML5Backend)(ConnectedSurveyShow); +export default ConnectedSurveyShow; diff --git a/client/app/bundles/course/survey/surveys.jsx b/client/app/bundles/course/survey/surveys.jsx index 83d1762f1cd..ad01050641f 100644 --- a/client/app/bundles/course/survey/surveys.jsx +++ b/client/app/bundles/course/survey/surveys.jsx @@ -1,12 +1,11 @@ -import React from 'react'; import { render } from 'react-dom'; import { Router } from 'react-router-dom'; import history from 'lib/history'; import ProviderWrapper from 'lib/components/ProviderWrapper'; -import SurveysLayout from 'course/survey/containers/SurveysLayout'; +import SurveysLayout from './containers/SurveysLayout'; import storeCreator from './store'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('course-survey-component'); if (mountNode) { diff --git a/client/app/bundles/course/user-email-subscriptions.jsx b/client/app/bundles/course/user-email-subscriptions.jsx index 2d4d18e15c7..2f634b17f9e 100644 --- a/client/app/bundles/course/user-email-subscriptions.jsx +++ b/client/app/bundles/course/user-email-subscriptions.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import UserEmailSubscriptions from 'course/pages/UserEmailSubscriptions'; diff --git a/client/app/bundles/course/user-notification/components/AchievementGainedPopup.jsx b/client/app/bundles/course/user-notification/components/AchievementGainedPopup.jsx index c4af0d216bf..d45a18130ff 100644 --- a/client/app/bundles/course/user-notification/components/AchievementGainedPopup.jsx +++ b/client/app/bundles/course/user-notification/components/AchievementGainedPopup.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import Popup from 'course/user-notification/components/Popup'; diff --git a/client/app/bundles/course/user-notification/components/LevelReachedPopup.jsx b/client/app/bundles/course/user-notification/components/LevelReachedPopup.jsx index 8f9ef495ca3..d4034f6f898 100644 --- a/client/app/bundles/course/user-notification/components/LevelReachedPopup.jsx +++ b/client/app/bundles/course/user-notification/components/LevelReachedPopup.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import Avatar from 'material-ui/Avatar'; diff --git a/client/app/bundles/course/user-notification/components/Popup.jsx b/client/app/bundles/course/user-notification/components/Popup.jsx index 5ffe3eaefec..2fb09e36a9b 100644 --- a/client/app/bundles/course/user-notification/components/Popup.jsx +++ b/client/app/bundles/course/user-notification/components/Popup.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import Dialog from 'material-ui/Dialog'; @@ -16,32 +15,30 @@ const styles = { }, }; -class Popup extends React.Component { - render() { - const { title, children, actionButtons, onDismiss } = this.props; - const dismissButton = ( - } - onClick={onDismiss} - /> - ); +const Popup = (props) => { + const { title, children, actionButtons, onDismiss } = props; + const dismissButton = ( + } + onClick={onDismiss} + /> + ); - return ( - - {children} - - ); - } -} + return ( + + {children} + + ); +}; Popup.propTypes = { title: PropTypes.string, diff --git a/client/app/bundles/course/user-notification/components/__test__/LevelReachedPopup.test.jsx b/client/app/bundles/course/user-notification/components/__test__/LevelReachedPopup.test.jsx index 3224f13f7a1..b0834aee4ec 100644 --- a/client/app/bundles/course/user-notification/components/__test__/LevelReachedPopup.test.jsx +++ b/client/app/bundles/course/user-notification/components/__test__/LevelReachedPopup.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import storeCreator from 'course/user-notification/store'; import LevelReachedPopup from '../LevelReachedPopup'; @@ -22,8 +21,8 @@ describe('', () => { }); it('does not show a link to the leaderboard', () => { - expect(wrapper.find('FlatButton').length).toBe(1); - expect(wrapper.find('p').length).toBe(0); + expect(wrapper.find('FlatButton')).toHaveLength(1); + expect(wrapper.find('p')).toHaveLength(0); }); }); @@ -35,8 +34,8 @@ describe('', () => { }); it('shows leaderboard button and message', () => { - expect(wrapper.find('FlatButton').length).toBe(2); - expect(wrapper.find('p').length).toBe(1); + expect(wrapper.find('FlatButton')).toHaveLength(2); + expect(wrapper.find('p')).toHaveLength(1); }); }); @@ -48,8 +47,8 @@ describe('', () => { }); it('shows leaderboard button but not message', () => { - expect(wrapper.find('FlatButton').length).toBe(2); - expect(wrapper.find('p').length).toBe(0); + expect(wrapper.find('FlatButton')).toHaveLength(2); + expect(wrapper.find('p')).toHaveLength(0); }); }); }); diff --git a/client/app/bundles/course/user-notification/containers/PopupNotifier/index.jsx b/client/app/bundles/course/user-notification/containers/PopupNotifier/index.jsx index 482d0a18373..65cc63adad2 100644 --- a/client/app/bundles/course/user-notification/containers/PopupNotifier/index.jsx +++ b/client/app/bundles/course/user-notification/containers/PopupNotifier/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import AchievementGainedPopup from 'course/user-notification/components/AchievementGainedPopup'; @@ -8,7 +8,7 @@ import { markAsRead, } from 'course/user-notification/actions'; -class PopupNotifier extends React.Component { +class PopupNotifier extends Component { static popupsHash = { achievementGained: AchievementGainedPopup, levelReached: LevelReachedPopup, diff --git a/client/app/bundles/course/video/submission/actions/__test__/video.test.js b/client/app/bundles/course/video/submission/actions/__test__/video.test.js index 2f78a23f0bc..04ca962051e 100644 --- a/client/app/bundles/course/video/submission/actions/__test__/video.test.js +++ b/client/app/bundles/course/video/submission/actions/__test__/video.test.js @@ -1,9 +1,9 @@ import CourseAPI from 'api/course'; import MockAdapter from 'axios-mock-adapter'; import { List as makeImmutableList, Map as makeImmutableMap } from 'immutable'; +import { playerStates } from 'lib/constants/videoConstants'; import store from '../../store'; import { changePlayerState, endSession, sendEvents } from '../video'; -import { playerStates } from '../../../../../../lib/constants/videoConstants'; const videoId = '1'; diff --git a/client/app/bundles/course/video/submission/actions/video.js b/client/app/bundles/course/video/submission/actions/video.js index fa005fbd25f..dcb2a433e1b 100644 --- a/client/app/bundles/course/video/submission/actions/video.js +++ b/client/app/bundles/course/video/submission/actions/video.js @@ -2,7 +2,7 @@ import { sessionActionTypes, videoActionTypes, } from 'lib/constants/videoConstants'; -import CourseAPI from '../../../../../api/course/index'; +import CourseAPI from 'api/course'; /** * Creates action to change the playing state of the video player. diff --git a/client/app/bundles/course/video/submission/containers/Charts/HeatMap.jsx b/client/app/bundles/course/video/submission/containers/Charts/HeatMap.jsx index dff8f690fad..082955e6a28 100644 --- a/client/app/bundles/course/video/submission/containers/Charts/HeatMap.jsx +++ b/client/app/bundles/course/video/submission/containers/Charts/HeatMap.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Bar } from 'react-chartjs-2'; @@ -88,7 +88,19 @@ const defaultProps = { onBarClick: () => {}, }; -class HeatMap extends React.Component { +class HeatMap extends Component { + static renderUnscaledChart(data, options) { + return ( +
+ +
+ ); + } + mouseOptions = { onClick: (_, elements) => { if (elements.length < 1) { @@ -155,18 +167,6 @@ class HeatMap extends React.Component { ); } - static renderUnscaledChart(data, options) { - return ( -
- -
- ); - } - render() { if (this.props.videoDuration === videoDefaults.placeHolderDuration) { return ; diff --git a/client/app/bundles/course/video/submission/containers/Charts/ProgressGraph.jsx b/client/app/bundles/course/video/submission/containers/Charts/ProgressGraph.jsx index a65ee7031dc..ecb9a8ccf81 100644 --- a/client/app/bundles/course/video/submission/containers/Charts/ProgressGraph.jsx +++ b/client/app/bundles/course/video/submission/containers/Charts/ProgressGraph.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import SelectField from 'material-ui/SelectField'; import MenuItem from 'material-ui/MenuItem'; @@ -93,7 +93,7 @@ const defaultProps = { onMarkerClick: () => {}, }; -class ProgressGraph extends React.Component { +class ProgressGraph extends Component { constructor(props) { super(props); this.displayDataCache = {}; @@ -101,40 +101,13 @@ class ProgressGraph extends React.Component { this.state = { selectedSessionId: Object.keys(props.sessions)[0] }; } - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { this.displayDataCache = {}; if (!nextProps[this.state.selectedSessionId]) { this.setState({ selectedSessionId: Object.keys(nextProps.sessions)[0] }); } } - processEvents(events, sessionStartTime, sessionEndTime, videoEndTime) { - const processedEvents = events.map((event) => { - const eventTime = Date.parse(event.eventTime); - const x = (eventTime - sessionStartTime.getTime()) / 1000; - const y = event.videoTime; - const type = event.eventType; - return { x, y, type }; - }); - - const endTimeOffset = - (sessionEndTime.getTime() - sessionStartTime.getTime()) / 1000; - - return [ - { - x: 0, - y: 0, - type: this.props.intl.formatMessage(translations.sessionStartLabel), - }, - ...processedEvents, - { - x: endTimeOffset, - y: videoEndTime, - type: this.props.intl.formatMessage(translations.sessionEndLabel), - }, - ]; - } - computeData(id) { if (this.displayDataCache[id]) { return this.displayDataCache[id]; @@ -156,6 +129,26 @@ class ProgressGraph extends React.Component { return this.displayDataCache[id]; } + generateMouseOptions(data) { + return { + onClick: (_, elements) => { + if (elements.length < 1) { + return; + } + const element = elements[0]; + const { y } = data.datasets[element._datasetIndex].data[element._index]; + + this.props.onMarkerClick(y); + }, + hover: { + onHover: (event, elements) => { + const style = event.target.style; + style.cursor = elements.length > 0 ? 'pointer' : 'default'; + }, + }, + }; + } + generateToolTipOptions() { return { tooltips: { @@ -189,54 +182,31 @@ class ProgressGraph extends React.Component { }; } - generateMouseOptions(data) { - return { - onClick: (_, elements) => { - if (elements.length < 1) { - return; - } - const element = elements[0]; - const { y } = data.datasets[element._datasetIndex].data[element._index]; + processEvents(events, sessionStartTime, sessionEndTime, videoEndTime) { + const processedEvents = events.map((event) => { + const eventTime = Date.parse(event.eventTime); + const x = (eventTime - sessionStartTime.getTime()) / 1000; + const y = event.videoTime; + const type = event.eventType; + return { x, y, type }; + }); - this.props.onMarkerClick(y); + const endTimeOffset = + (sessionEndTime.getTime() - sessionStartTime.getTime()) / 1000; + + return [ + { + x: 0, + y: 0, + type: this.props.intl.formatMessage(translations.sessionStartLabel), }, - hover: { - onHover: (event, elements) => { - const style = event.target.style; - style.cursor = elements.length > 0 ? 'pointer' : 'default'; - }, + ...processedEvents, + { + x: endTimeOffset, + y: videoEndTime, + type: this.props.intl.formatMessage(translations.sessionEndLabel), }, - }; - } - - renderPlot() { - const displayData = this.computeData(this.state.selectedSessionId); - if (!displayData) { - return ; - } - - const data = { - datasets: [ - { - ...graphDataLineOptions, - label: new Date( - this.props.sessions[this.state.selectedSessionId].sessionStart, - ).toLocaleString(), - data: displayData, - }, - ], - }; - - return ( - - ); + ]; } renderDropDown() { @@ -269,6 +239,36 @@ class ProgressGraph extends React.Component { ); } + renderPlot() { + const displayData = this.computeData(this.state.selectedSessionId); + if (!displayData) { + return ; + } + + const data = { + datasets: [ + { + ...graphDataLineOptions, + label: new Date( + this.props.sessions[this.state.selectedSessionId].sessionStart, + ).toLocaleString(), + data: displayData, + }, + ], + }; + + return ( + + ); + } + render() { if (this.props.videoDuration === videoDefaults.placeHolderDuration) { return ; diff --git a/client/app/bundles/course/video/submission/containers/Discussion.jsx b/client/app/bundles/course/video/submission/containers/Discussion.jsx index de0fe86b770..feface10d96 100644 --- a/client/app/bundles/course/video/submission/containers/Discussion.jsx +++ b/client/app/bundles/course/video/submission/containers/Discussion.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Paper from 'material-ui/Paper'; @@ -25,7 +25,7 @@ const defaultProps = { scrollTopicId: null, }; -class Discussion extends React.Component { +class Discussion extends Component { constructor(props) { super(props); this.topicPane = null; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/Controls.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/Controls.jsx index c72452f3ac5..4b26bf7d512 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/Controls.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/Controls.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import IconButton from 'material-ui/IconButton'; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/EditPostContainer.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/EditPostContainer.jsx index cf0f869ca24..c797e23c7ae 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/EditPostContainer.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/EditPostContainer.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/Editor.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/Editor.jsx index 3da305fe14a..ae2fe778b9d 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/Editor.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/Editor.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import RaisedButton from 'material-ui/RaisedButton'; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/NewReplyContainer.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/NewReplyContainer.jsx index 552f5592fa6..2cd0b6b5b94 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/NewReplyContainer.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/NewReplyContainer.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/PostMenu.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/PostMenu.jsx index 116a24cd633..a7e37e0c6cc 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/PostMenu.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/PostMenu.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/PostPresentation.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/PostPresentation.jsx index 2774fbfc628..935401b3db0 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/PostPresentation.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/PostPresentation.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import styles from '../Discussion.scss'; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/Reply.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/Reply.jsx index 7d18c077df7..8581af7576b 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/Reply.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/Reply.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import FlatButton from 'material-ui/FlatButton'; diff --git a/client/app/bundles/course/video/submission/containers/DiscussionElements/Topic.jsx b/client/app/bundles/course/video/submission/containers/DiscussionElements/Topic.jsx index 4ed259a5165..30f1eec4a51 100644 --- a/client/app/bundles/course/video/submission/containers/DiscussionElements/Topic.jsx +++ b/client/app/bundles/course/video/submission/containers/DiscussionElements/Topic.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Divider from 'material-ui/Divider'; diff --git a/client/app/bundles/course/video/submission/containers/Statistics.jsx b/client/app/bundles/course/video/submission/containers/Statistics.jsx index a5f5d23478b..e407297e5d9 100644 --- a/client/app/bundles/course/video/submission/containers/Statistics.jsx +++ b/client/app/bundles/course/video/submission/containers/Statistics.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Tab, Tabs } from 'material-ui/Tabs'; import ProgressGraph from './Charts/ProgressGraph'; @@ -24,21 +23,17 @@ const propTypes = { watchFrequency: PropTypes.arrayOf(PropTypes.number).isRequired, }; -class Statistics extends React.Component { - render() { - return ( - - -
- -
- - - -
- ); - } -} +const Statistics = ({ watchFrequency, sessions }) => ( + + +
+ +
+ + + +
+); Statistics.propTypes = propTypes; diff --git a/client/app/bundles/course/video/submission/containers/Submission.jsx b/client/app/bundles/course/video/submission/containers/Submission.jsx index 6efa73e4d6e..c757fa79308 100644 --- a/client/app/bundles/course/video/submission/containers/Submission.jsx +++ b/client/app/bundles/course/video/submission/containers/Submission.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import NotificationBar, { notificationShape, diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/CaptionsButton.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/CaptionsButton.jsx index 9ebc7eedbfa..3cf0c83724b 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/CaptionsButton.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/CaptionsButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import ClosedCaption from 'material-ui/svg-icons/av/closed-caption'; import IconButton from 'material-ui/IconButton'; diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/NextVideoButton.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/NextVideoButton.jsx index aa5571c0ae7..0e6623d6748 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/NextVideoButton.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/NextVideoButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import IconButton from 'material-ui/IconButton'; import SkipNext from 'material-ui/svg-icons/av/skip-next'; diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/PlayBackRateSelector.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/PlayBackRateSelector.jsx index d433c7b2e5d..04f3f99e883 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/PlayBackRateSelector.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/PlayBackRateSelector.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import DropDownMenu from 'material-ui/DropDownMenu'; diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/PlayButton.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/PlayButton.jsx index a74c04e83ae..5fd8b95dbb3 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/PlayButton.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/PlayButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { playerStates } from 'lib/constants/videoConstants'; diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/VideoPlayerSlider.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/VideoPlayerSlider.jsx index 3c71d2d75d8..117dc8d3f5a 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/VideoPlayerSlider.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/VideoPlayerSlider.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { formatTimestamp } from 'lib/helpers/videoHelpers'; @@ -43,8 +43,8 @@ const defaultProps = { bufferProgress: 0, }; -class VideoPlayerSlider extends React.Component { - componentWillMount() { +class VideoPlayerSlider extends Component { + UNSAFE_componentWillMount() { if (VideoPlayerSlider.TippedSlider !== undefined) return; // Already loaded import(/* webpackChunkName: "video" */ 'rc-slider').then((rcSlider) => { diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/VideoTimestamp.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/VideoTimestamp.jsx index 3d0cec44d95..76287686ad6 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/VideoTimestamp.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/VideoTimestamp.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { formatTimestamp } from 'lib/helpers/videoHelpers'; diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/VolumeButton.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/VolumeButton.jsx index b8e37a86e00..bba7710791a 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/VolumeButton.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/VolumeButton.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { videoDefaults } from 'lib/constants/videoConstants'; diff --git a/client/app/bundles/course/video/submission/containers/VideoControls/VolumeSlider.jsx b/client/app/bundles/course/video/submission/containers/VideoControls/VolumeSlider.jsx index 8c74d169b41..a381eb9a10c 100644 --- a/client/app/bundles/course/video/submission/containers/VideoControls/VolumeSlider.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoControls/VolumeSlider.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Slider from 'material-ui/Slider'; diff --git a/client/app/bundles/course/video/submission/containers/VideoPlayer.jsx b/client/app/bundles/course/video/submission/containers/VideoPlayer.jsx index 03285d86883..defbda93683 100644 --- a/client/app/bundles/course/video/submission/containers/VideoPlayer.jsx +++ b/client/app/bundles/course/video/submission/containers/VideoPlayer.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import Paper from 'material-ui/Paper'; import { connect } from 'react-redux'; @@ -70,14 +70,14 @@ const defaultProps = { forceSeek: false, }; -class VideoPlayer extends React.Component { +class VideoPlayer extends Component { constructor(props) { super(props); this.player = null; } - componentWillMount() { + UNSAFE_componentWillMount() { if (VideoPlayer.ReactPlayer !== undefined) return; // Already loaded import(/* webpackChunkName: "video" */ 'react-player').then( @@ -96,7 +96,7 @@ class VideoPlayer extends React.Component { } } - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { if (nextProps.forceSeek) { this.player.seekTo(nextProps.playerProgress); } @@ -125,6 +125,12 @@ class VideoPlayer extends React.Component { this.player = player; }; + readyCallback = () => { + if (this.props.initialSeekTime) { + this.props.directSeek(this.props.initialSeekTime); + } + }; + /** * Loads or unloads the captions module for Youtube according to whether provided * options sets captions to on or off. @@ -158,12 +164,6 @@ class VideoPlayer extends React.Component { } }; - readyCallback = () => { - if (this.props.initialSeekTime) { - this.props.directSeek(this.props.initialSeekTime); - } - }; - render() { // do not attempt to create a player server-side, it won't work if (typeof document === 'undefined') return null; diff --git a/client/app/bundles/course/video/submission/submissions-edit.jsx b/client/app/bundles/course/video/submission/submissions-edit.jsx index a862cc57c3e..14f0fa13792 100644 --- a/client/app/bundles/course/video/submission/submissions-edit.jsx +++ b/client/app/bundles/course/video/submission/submissions-edit.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import LoadingIndicator from 'lib/components/LoadingIndicator'; @@ -15,7 +14,7 @@ function renderSubmission(state, node) { ); } -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('video-component'); if (!mountNode) { diff --git a/client/app/bundles/course/video/submission/submissions-show.jsx b/client/app/bundles/course/video/submission/submissions-show.jsx index 67734a8ef45..ace158718be 100644 --- a/client/app/bundles/course/video/submission/submissions-show.jsx +++ b/client/app/bundles/course/video/submission/submissions-show.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import Statistics from './containers/Statistics'; @@ -6,7 +5,7 @@ import VideoPlayer from './containers/VideoPlayer'; import storeCreator from './store'; import styles from './containers/Statistics.scss'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('video-stats'); if (!mountNode) { diff --git a/client/app/bundles/course/video/videos.jsx b/client/app/bundles/course/video/videos.jsx index 50d562d1329..a74a4ee2a91 100644 --- a/client/app/bundles/course/video/videos.jsx +++ b/client/app/bundles/course/video/videos.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import HeatMap from './submission/containers/Charts/HeatMap'; @@ -6,7 +5,7 @@ import storeCreator from './submission/store'; import styles from './submission/containers/Statistics.scss'; import VideoPlayer from './submission/containers/VideoPlayer'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('video-overall-stats'); if (!mountNode) { diff --git a/client/app/bundles/course/virtual-classrooms.js b/client/app/bundles/course/virtual-classrooms.js index 80c688854a7..7155564f5e2 100644 --- a/client/app/bundles/course/virtual-classrooms.js +++ b/client/app/bundles/course/virtual-classrooms.js @@ -12,7 +12,7 @@ function appendInfo($node, selector, text) { ); } -$(document).ready(() => { +$(() => { $(document).on('click', '.gen-access-link', function () { const $this = $(this); const splits = $this.attr('id').split('-'); diff --git a/client/app/index.js b/client/app/index.js index 5b0bc0807ab..3f7dc425206 100644 --- a/client/app/index.js +++ b/client/app/index.js @@ -25,6 +25,9 @@ function loadCurrentModule() { } function loadModules() { + if (module.hot) { + module.hot.accept(); + } // Initializers require('lib/initializers/ace-editor'); require('lib/initializers/confirm-dialog'); diff --git a/client/app/lib/__test__/redux-form.test.jsx b/client/app/lib/__test__/redux-form.test.jsx index 6bbb3ff1e44..03a1d8f1ec5 100644 --- a/client/app/lib/__test__/redux-form.test.jsx +++ b/client/app/lib/__test__/redux-form.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { createStore, combineReducers } from 'redux'; import { mount } from 'enzyme'; import { reduxForm, reducer as formReducer, submit } from 'redux-form'; diff --git a/client/app/lib/components/BarChart.jsx b/client/app/lib/components/BarChart.jsx index 9f51ebbf79c..93b0d83fa91 100644 --- a/client/app/lib/components/BarChart.jsx +++ b/client/app/lib/components/BarChart.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import Chip from 'material-ui/Chip'; import Avatar from 'material-ui/Avatar'; @@ -33,7 +33,7 @@ const styles = { }, }; -class BarChart extends React.Component { +class BarChart extends Component { renderChart(total) { return (
diff --git a/client/app/lib/components/ConfirmationDialog.jsx b/client/app/lib/components/ConfirmationDialog.jsx index 546a1475340..ab240aadaa2 100644 --- a/client/app/lib/components/ConfirmationDialog.jsx +++ b/client/app/lib/components/ConfirmationDialog.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Dialog from 'material-ui/Dialog'; @@ -9,7 +9,7 @@ const buttonStyle = { margin: 3, }; -class ConfirmationDialog extends React.Component { +class ConfirmationDialog extends Component { render() { const { intl, diff --git a/client/app/lib/components/ErrorBoundary.jsx b/client/app/lib/components/ErrorBoundary.jsx index abe6d639954..f8341b77462 100644 --- a/client/app/lib/components/ErrorBoundary.jsx +++ b/client/app/lib/components/ErrorBoundary.jsx @@ -1,11 +1,11 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; const propTypes = { children: PropTypes.element.isRequired, }; -class ErrorBoundary extends React.Component { +class ErrorBoundary extends Component { constructor(props) { super(props); this.state = { hasError: false, error: null, info: null }; diff --git a/client/app/lib/components/ErrorCard.jsx b/client/app/lib/components/ErrorCard.jsx index 9ef25b703d0..5722e7ddd17 100644 --- a/client/app/lib/components/ErrorCard.jsx +++ b/client/app/lib/components/ErrorCard.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { Card, CardHeader, CardText } from 'material-ui'; import { red200, red900 } from 'material-ui/styles/colors'; import PropTypes from 'prop-types'; diff --git a/client/app/lib/components/ErrorText.jsx b/client/app/lib/components/ErrorText.jsx index 3de0004b163..eba796ca42d 100644 --- a/client/app/lib/components/ErrorText.jsx +++ b/client/app/lib/components/ErrorText.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { red500 } from 'material-ui/styles/colors'; diff --git a/client/app/lib/components/ExpandableText.jsx b/client/app/lib/components/ExpandableText.jsx index e29e03f8425..1f03ad05b3b 100644 --- a/client/app/lib/components/ExpandableText.jsx +++ b/client/app/lib/components/ExpandableText.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; @@ -20,7 +20,7 @@ const propTypes = { style: PropTypes.object, }; -class ExpandableText extends React.Component { +class ExpandableText extends Component { constructor(props) { super(props); diff --git a/client/app/lib/components/FormDialogue.jsx b/client/app/lib/components/FormDialogue.jsx index e5a8ac9e554..006fd0eff4d 100644 --- a/client/app/lib/components/FormDialogue.jsx +++ b/client/app/lib/components/FormDialogue.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape } from 'react-intl'; import Dialog from 'material-ui/Dialog'; @@ -18,7 +18,7 @@ const propTypes = { children: PropTypes.node, }; -class FormDialogue extends React.Component { +class FormDialogue extends Component { constructor(props) { super(props); @@ -27,6 +27,15 @@ class FormDialogue extends React.Component { }; } + handleDiscard = () => { + this.setState({ discardConfirmationOpen: false }); + this.props.hideForm(); + }; + + handleDiscardCancel = () => { + this.setState({ discardConfirmationOpen: false }); + }; + handleFormClose = () => { const { hideForm, disabled, skipConfirmation } = this.props; if (disabled) { @@ -40,15 +49,6 @@ class FormDialogue extends React.Component { } }; - handleDiscardCancel = () => { - this.setState({ discardConfirmationOpen: false }); - }; - - handleDiscard = () => { - this.setState({ discardConfirmationOpen: false }); - this.props.hideForm(); - }; - render() { const { intl, title, disabled, open, submitForm, children } = this.props; const formActions = [ diff --git a/client/app/lib/components/LoadingIndicator.jsx b/client/app/lib/components/LoadingIndicator.jsx index c2049c98fef..618b70b9784 100644 --- a/client/app/lib/components/LoadingIndicator.jsx +++ b/client/app/lib/components/LoadingIndicator.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import RefreshIndicator from 'material-ui/RefreshIndicator'; const styles = { diff --git a/client/app/lib/components/MaterialSummernote.jsx b/client/app/lib/components/MaterialSummernote.jsx index 5a3ea7593a4..abb0d77fe8a 100644 --- a/client/app/lib/components/MaterialSummernote.jsx +++ b/client/app/lib/components/MaterialSummernote.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; import ReactSummernote from 'react-summernote'; @@ -35,12 +35,11 @@ const contextTypes = { muiTheme: PropTypes.object.isRequired, }; -class MaterialSummernote extends React.Component { +class MaterialSummernote extends Component { constructor(props) { super(props); this.state = { isFocused: false }; this.reactSummernote = null; - this.inlineCodeButton = this.inlineCodeButton.bind(this); } onChange = (e) => { @@ -62,23 +61,7 @@ class MaterialSummernote extends React.Component { } }; - uploadImage = (image, onImageUploaded) => { - const formData = new FormData(); - formData.append('file', image); - formData.append('name', image.name); - - axios - .post('/attachments', formData) - .then((response) => response.data) - .then((data) => { - if (data.success) { - onImageUploaded(data.id); - } - }); - }; - - /* eslint class-methods-use-this: "off" */ - inlineCodeButton() { + inlineCodeButton = () => { const ui = $.summernote.ui; const button = ui.button({ @@ -108,7 +91,22 @@ class MaterialSummernote extends React.Component { }); return button.render(); - } + }; + + uploadImage = (image, onImageUploaded) => { + const formData = new FormData(); + formData.append('file', image); + formData.append('name', image.name); + + axios + .post('/attachments', formData) + .then((response) => response.data) + .then((data) => { + if (data.success) { + onImageUploaded(data.id); + } + }); + }; render() { const { @@ -202,7 +200,7 @@ class MaterialSummernote extends React.Component { ['style', ['style']], ['font', ['bold', 'underline', 'inlineCode', 'clear']], ['script', ['superscript', 'subscript']], - ...(this.props.airModeColor ? ['color', ['color']] : []), + ...(this.props.airModeColor ? [['color', ['color']]] : []), ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], diff --git a/client/app/lib/components/NotificationBar.jsx b/client/app/lib/components/NotificationBar.jsx index ea0b8ebe85f..b2181055bc4 100644 --- a/client/app/lib/components/NotificationBar.jsx +++ b/client/app/lib/components/NotificationBar.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import Snackbar from 'material-ui/Snackbar'; @@ -18,7 +18,7 @@ export const notificationShape = PropTypes.shape({ * This is a simplified SnackBar, which will send notification and auto hide the notification after * certain period (default is 5000). */ -export default class NotificationBar extends React.Component { +export default class NotificationBar extends Component { shouldComponentUpdate(nextProps) { return nextProps.notification !== this.props.notification; } diff --git a/client/app/lib/components/ProviderWrapper.jsx b/client/app/lib/components/ProviderWrapper.jsx index 74fbec1d406..4b709fb33ea 100644 --- a/client/app/lib/components/ProviderWrapper.jsx +++ b/client/app/lib/components/ProviderWrapper.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { Provider } from 'react-redux'; import { PersistGate } from 'redux-persist/lib/integration/react'; diff --git a/client/app/lib/components/RailsConfirmationDialog.jsx b/client/app/lib/components/RailsConfirmationDialog.jsx index c48a735a568..7c768610aeb 100644 --- a/client/app/lib/components/RailsConfirmationDialog.jsx +++ b/client/app/lib/components/RailsConfirmationDialog.jsx @@ -1,22 +1,21 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import ConfirmationDialog from 'lib/components/ConfirmationDialog'; -class RailsConfirmationDialog extends React.Component { +class RailsConfirmationDialog extends Component { constructor(props) { super(props); this.state = { open: true, disableButtons: false }; - this.onConfirm = this.onConfirm.bind(this); this.onConfirmSecondary = this.props.onConfirmSecondaryCallback ? this.onConfirmSecondary.bind(this) : null; } // Disable buttons once the confirm button is clicked, then do confirm callback. - onConfirm() { + onConfirm = () => { this.setState({ disableButtons: true }); this.props.onConfirmCallback(); - } + }; // Disable buttons once the secondary confirm button is clicked, then do confirm callback. onConfirmSecondary() { diff --git a/client/app/lib/components/Thumbnail.jsx b/client/app/lib/components/Thumbnail.jsx index 38b4d72d088..a2ded5fedbb 100644 --- a/client/app/lib/components/Thumbnail.jsx +++ b/client/app/lib/components/Thumbnail.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import Dialog from 'material-ui/Dialog'; @@ -16,7 +16,7 @@ const styles = { }, }; -class Thumbnail extends React.PureComponent { +class Thumbnail extends PureComponent { constructor(props) { super(props); const { src, file } = props; @@ -33,7 +33,7 @@ class Thumbnail extends React.PureComponent { } } - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { const { src, file } = nextProps; const isFromFile = !src && file; @@ -49,7 +49,6 @@ class Thumbnail extends React.PureComponent { } render() { - // eslint-disable-next-line no-unused-vars const { src, alt, diff --git a/client/app/lib/components/TitleBar.jsx b/client/app/lib/components/TitleBar.jsx index 9f401c5f320..d00c05ad308 100644 --- a/client/app/lib/components/TitleBar.jsx +++ b/client/app/lib/components/TitleBar.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import AppBar from 'material-ui/AppBar'; @@ -22,7 +21,7 @@ const TitleBar = ({ style, iconElementLeft, ...props }) => ( TitleBar.propTypes = { onClick: PropTypes.func, - style: PropTypes.object, // eslint-disable-line react/forbid-prop-types + style: PropTypes.object, iconElementLeft: PropTypes.node, }; diff --git a/client/app/lib/components/__test__/ErrorText.test.jsx b/client/app/lib/components/__test__/ErrorText.test.jsx index 3f5e6464f05..a29d4a2e853 100644 --- a/client/app/lib/components/__test__/ErrorText.test.jsx +++ b/client/app/lib/components/__test__/ErrorText.test.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { shallow } from 'enzyme'; import ErrorText from '../ErrorText'; diff --git a/client/app/lib/components/course/ConditionList/index.jsx b/client/app/lib/components/course/ConditionList/index.jsx index 7ce11abeb99..b526c303af6 100644 --- a/client/app/lib/components/course/ConditionList/index.jsx +++ b/client/app/lib/components/course/ConditionList/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, intlShape, FormattedMessage } from 'react-intl'; import { @@ -16,41 +16,75 @@ import MenuItem from 'material-ui/MenuItem'; import NewIcon from 'material-ui/svg-icons/content/add'; import EditIcon from 'material-ui/svg-icons/editor/mode-edit'; import DeleteIcon from 'material-ui/svg-icons/action/delete'; +import ConfirmationDialog from 'lib/components/ConfirmationDialog'; import translations from './translations.intl'; const styles = { alignRight: { textAlign: 'right', }, + alignMiddle: { + verticalAlign: 'middle', + }, }; -class ConditionList extends React.Component { - renderTopHeader() { - return ( - - -

- -

-
- - - - +class ConditionList extends Component { + constructor(props) { + super(props); + this.state = { + deletionUrl: '', + isDeleting: false, + }; + } + + onConfirmDelete() { + // TODO: Refactor the below into a ConditionAPI + const form = $('
', { + method: 'POST', + action: this.state.deletionUrl, + }); + + const token = $('', { + type: 'hidden', + name: 'authenticity_token', + value: $.rails.csrfToken(), + }); + + const method = $('', { + name: '_method', + type: 'hidden', + value: 'DELETE', + }); + + // This will refresh the page + form.append(token, method).appendTo(document.body).submit(); + } + + renderConditionRows() { + return this.props.conditions.map((condition) => ( + + {condition.type} + {condition.description} + + + + + + + this.setState({ + isDeleting: true, + deletionUrl: condition.delete_url, + }) } - anchorOrigin={{ horizontal: 'right', vertical: 'top' }} - targetOrigin={{ horizontal: 'right', vertical: 'top' }} - className="add-condition-btn" + style={styles.alignMiddle} + id={condition.delete_url} > - {this.props.newConditionUrls.map((url) => ( - - ))} - - + + + - ); + )); } renderHeaderRows() { @@ -77,28 +111,32 @@ class ConditionList extends React.Component { ); } - renderConditionRows() { - return this.props.conditions.map((condition) => ( - - {condition.type} - {condition.description} - - - - - - + +

+ +

+
+ + + +
+ } + anchorOrigin={{ horizontal: 'right', vertical: 'top' }} + targetOrigin={{ horizontal: 'right', vertical: 'top' }} + className="add-condition-btn" > - - -
+ {this.props.newConditionUrls.map((url) => ( + + ))} + +
- )); + ); } render() { @@ -115,6 +153,13 @@ class ConditionList extends React.Component { )} + this.setState({ isDeleting: false })} + onConfirm={() => this.onConfirmDelete()} + />
); } diff --git a/client/app/lib/components/form/DateTimePicker.jsx b/client/app/lib/components/form/DateTimePicker.jsx index 1b547190cdb..cf289cec6f4 100644 --- a/client/app/lib/components/form/DateTimePicker.jsx +++ b/client/app/lib/components/form/DateTimePicker.jsx @@ -1,16 +1,18 @@ -import React from 'react'; +import { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages, intlShape } from 'react-intl'; import moment from 'lib/moment'; -import DatePicker from 'material-ui-pickers/DatePicker'; -import TimePicker from 'material-ui-pickers/TimePicker'; +import { + KeyboardDatePicker, + KeyboardTimePicker, + MuiPickersUtilsProvider, +} from '@material-ui/pickers'; import DateRange from 'material-ui/svg-icons/action/date-range'; import KeyboardArrowLeft from 'material-ui/svg-icons/hardware/keyboard-arrow-left'; import KeyboardArrowRight from 'material-ui/svg-icons/hardware/keyboard-arrow-right'; import Schedule from 'material-ui/svg-icons/action/schedule'; -import MuiPickersUtilsProvider from 'material-ui-pickers/MuiPickersUtilsProvider'; import MomentUtils from '@date-io/moment'; -import { MuiThemeProvider, createMuiTheme } from '@material-ui/core'; +import { MuiThemeProvider, createTheme } from '@material-ui/core'; const translations = defineMessages({ datePlaceholder: { @@ -21,6 +23,14 @@ const translations = defineMessages({ id: 'lib.components.form.DateTimePicker.timePlaceholder', defaultMessage: 'hh:mm', }, + invalidDate: { + id: 'lib.components.form.DateTimePicker.invalidDate', + defaultMessage: 'Invalid date', + }, + invalidTime: { + id: 'lib.components.form.DateTimePicker.invalidTime', + defaultMessage: 'Invalid time', + }, }); const styleConstants = { @@ -49,19 +59,15 @@ const styles = { }, }; -const datetimepickerTheme = createMuiTheme({ +const datetimepickerTheme = createTheme({ // https://material-ui.com/customization/themes/#typography---html-font-size // https://material-ui.com/style/typography/#migration-to-typography-v2 typography: { htmlFontSize: 10, useNextVariants: true, }, - overrides: { - MuiModal: { - root: { - zIndex: 1800, - }, - }, + zIndex: { + modal: 1800, }, }); @@ -82,7 +88,31 @@ const propTypes = { style: PropTypes.object, }; -class DateTimePicker extends React.PureComponent { +/** + * Unfortunately, the behaviour of this component is not exactly ideal, as there + * are two fields - date and time, but they share the same Date object. What thus + * happens is that keyboard interactions, i.e. when users manually enter the date + * and time, are quite wonky. + * + * For example, if the user deletes the entry from the time field, we would ideally + * want to set it to null, i.e. no time specified, but doing so would also clear + * the date field, which is not what a user would expect. As such, we would have + * to instead set the time to 00:00, but doing so is also not exactly expected, + * since the user will see 00:00 pop up after deleting the data from the field. + * + * We face a similar issue when the user deletes the date field entry, where the + * time field will also be cleared since the date is set to null. + * + * We can't exactly treat all null values as invalid values as well, since there + * may be optional datetime inputs. As such, we need to be capable of storing + * null values for the datetime. + * + * TODO: To look into fixing the abovementioned solution. One possible way would + * be to simply prevent keyboard inputs, and only allow the usage of the pickers. + * Another would be to upgrade the picker dependencies and hope that the handling + * that comes shipped with the newer versions handle these better than we can. + */ +class DateTimePicker extends PureComponent { static displayState(dateTime) { return { displayedDate: dateTime ? moment(dateTime).format('DD-MM-YYYY') : '', @@ -98,44 +128,92 @@ class DateTimePicker extends React.PureComponent { this.state = DateTimePicker.displayState(props.value); } - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { const dateTime = nextProps.value; this.setState(DateTimePicker.displayState(dateTime)); } - updateDateTime = (newDateTime) => { - const { onBlur, onChange } = this.props; - this.setState(DateTimePicker.displayState(newDateTime)); - // Marks redux-form field as 'touched' so that validation errors are shown, if any. - if (onBlur) { - onBlur(); - } - if (onChange) { - onChange(null, newDateTime); - } - }; - updateDate = (newDate) => { if (newDate === null) { + this.setState({ dateError: '' }); this.updateDateTime(null); return; } const { date, months, years } = moment(newDate).toObject(); + const toCheck = [date, months, years]; + + // We will only continue processing if date, months and years are ALL specified. + // The reasons for this are: + // - If the user is manually entering the date via keyboard, then until the user + // finishes typing the entire date, some of the fields above will be NaN. + // - If we allow the above situation to proceed, this.props.value will be "corrupted" + // and become an invalid date. + // - On the other hand, if we return early until all fields are specified, we will + // naturally obtain a valid date once all fields are here. + // - Note that picking the date via the datepicker isn't affected, since all 3 fields + // will be specified for such a situation. + if (!toCheck.every((num) => num != null && !Number.isNaN(num))) { + // We will not clear the current datetime for now, since that will be very jarring + // when the user deletes one character and the entire field resets to dd-mm-yyyy. + this.setState({ + dateError: this.props.intl.formatMessage(translations.invalidDate), + }); + return; + } + const newDateTime = this.props.value ? moment(this.props.value).set({ date, months, years }) : moment({ date, months, years }); + this.setState({ dateError: '' }); this.updateDateTime(newDateTime.toDate()); }; + updateDateTime = (newDateTime) => { + const { onBlur, onChange } = this.props; + this.setState(DateTimePicker.displayState(newDateTime)); + // Marks redux-form field as 'touched' so that validation errors are shown, if any. + if (onBlur) { + onBlur(); + } + if (onChange) { + onChange(null, newDateTime); + } + }; + updateTime = (newTime) => { if (newTime === null) { - this.updateDateTime(null); + this.setState({ timeError: '' }); + // If there is already a date object, we don't want to just clear it, which + // will be very disruptive if the user is also using the Date field, since + // their date value will also just disappear. + // + // Instead, we will set it to 00:00. + if (!this.props.value) { + this.updateDateTime(null); + return; + } + const resetDateTime = moment(this.props.value).set({ + hours: 0, + minutes: 0, + }); + this.updateDateTime(resetDateTime.toDate()); return; } const { hours, minutes } = moment(newTime).toObject(); + const toCheck = [hours, minutes]; + + // See comment under updateDate on rationale for early termination here. + if (!toCheck.every((num) => num != null && !Number.isNaN(num))) { + this.setState({ + timeError: this.props.intl.formatMessage(translations.invalidTime), + }); + return; + } + const newDateTime = this.props.value ? moment(this.props.value).set({ hours, minutes }) : moment({ hours, minutes }); + this.setState({ timeError: '' }); this.updateDateTime(newDateTime.toDate()); }; @@ -159,33 +237,34 @@ class DateTimePicker extends React.PureComponent {
- } leftArrowIcon={} rightArrowIcon={} format="DD-MM-YYYY" label={floatingLabelText} - emptyLabel={intl.formatMessage(translations.datePlaceholder)} + placeholder={intl.formatMessage(translations.datePlaceholder)} error={!!errorText || !!this.state.dateError} - helperText={errorText || this.state.dateError} + // We want this component's error message to take priority over the parent's + helperText={this.state.dateError || errorText} value={value || null} /> - } - emptyLabel={intl.formatMessage(translations.timePlaceholder)} + placeholder={intl.formatMessage(translations.timePlaceholder)} + label="24-hr clock" error={!!this.state.timeError} helperText={this.state.timeError} value={value || null} + format="HH:mm" />
diff --git a/client/app/lib/components/redux-form/Checkbox.js b/client/app/lib/components/redux-form/Checkbox.js index d9c7a6433b9..5dba0db2709 100644 --- a/client/app/lib/components/redux-form/Checkbox.js +++ b/client/app/lib/components/redux-form/Checkbox.js @@ -5,15 +5,15 @@ export default createComponent( Checkbox, ({ input: { onChange, value, ...inputProps }, - meta, // eslint-disable-line no-unused-vars - intl, // eslint-disable-line no-unused-vars + meta: _meta, + intl: _intl, onCheck: onCheckFunc, ...props }) => ({ ...inputProps, ...props, checked: !!value, - onCheck: (event, isInputChecked) => { + onCheck: (_event, isInputChecked) => { onChange(isInputChecked); if (onCheckFunc && typeof onCheckFunc === 'function') { onCheckFunc(isInputChecked); diff --git a/client/app/lib/components/redux-form/MultiSelect.jsx b/client/app/lib/components/redux-form/MultiSelect.jsx index 9c230657bef..01398d4fe3f 100644 --- a/client/app/lib/components/redux-form/MultiSelect.jsx +++ b/client/app/lib/components/redux-form/MultiSelect.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import ChipInput from 'material-ui-chip-input'; import createComponent from './createComponent'; diff --git a/client/app/lib/components/redux-form/SingleFileInput/BadgePreview.jsx b/client/app/lib/components/redux-form/SingleFileInput/BadgePreview.jsx index dd0c976400c..e42c155fcc0 100644 --- a/client/app/lib/components/redux-form/SingleFileInput/BadgePreview.jsx +++ b/client/app/lib/components/redux-form/SingleFileInput/BadgePreview.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import InsertDriveFileIcon from 'material-ui/svg-icons/editor/insert-drive-file'; import Avatar from 'material-ui/Avatar'; import ImagePreview from './ImagePreview'; diff --git a/client/app/lib/components/redux-form/SingleFileInput/DeleteButton.jsx b/client/app/lib/components/redux-form/SingleFileInput/DeleteButton.jsx index d960e4cd0c8..3ab578e43a2 100644 --- a/client/app/lib/components/redux-form/SingleFileInput/DeleteButton.jsx +++ b/client/app/lib/components/redux-form/SingleFileInput/DeleteButton.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import Badge from 'material-ui/Badge'; import IconButton from 'material-ui/IconButton'; @@ -18,7 +18,7 @@ const styles = { }, }; -export default class DeleteButton extends React.Component { +export default class DeleteButton extends Component { renderIcon() { return ( -
{file && file.name}
-
- -
- - ); - } -} +const FilePreview = (props) => { + const { file } = props; + return ( + <> +
{file && file.name}
+
+ +
+ + ); +}; FilePreview.propTypes = { file: PropTypes.object, diff --git a/client/app/lib/components/redux-form/SingleFileInput/ImagePreview.jsx b/client/app/lib/components/redux-form/SingleFileInput/ImagePreview.jsx index 18553e70b69..e5e2829dfbb 100644 --- a/client/app/lib/components/redux-form/SingleFileInput/ImagePreview.jsx +++ b/client/app/lib/components/redux-form/SingleFileInput/ImagePreview.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import InsertDriveFileIcon from 'material-ui/svg-icons/editor/insert-drive-file'; @@ -36,7 +36,7 @@ function renderImage(imageSrc, fileName) { ); } -export default class ImagePreview extends React.Component { +export default class ImagePreview extends Component { getImage() { const { originalUrl, file } = this.props; const isImage = file.type.includes('image/'); diff --git a/client/app/lib/components/redux-form/SingleFileInput/__test__/BadgePreview.test.js b/client/app/lib/components/redux-form/SingleFileInput/__test__/BadgePreview.test.js index a7ad128ab43..3f835db0bd1 100644 --- a/client/app/lib/components/redux-form/SingleFileInput/__test__/BadgePreview.test.js +++ b/client/app/lib/components/redux-form/SingleFileInput/__test__/BadgePreview.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { mount } from 'enzyme'; import BadgePreview from '../BadgePreview'; @@ -17,10 +16,8 @@ describe('', () => { ); const avatar = badgePreview.find('Avatar').first(); - expect(badgePreview.find('.file-name').text().includes('bar')).toEqual( - true, - ); - expect(avatar.prop('src')).toEqual('foo'); + expect(badgePreview.find('.file-name').text()).toContain('bar'); + expect(avatar.prop('src')).toBe('foo'); expect(avatar.prop('icon')).toBeUndefined(); }); @@ -35,8 +32,8 @@ describe('', () => { const avatar = badgePreview.find('Avatar').first(); // SvgIcon is the element of the placeholder 'InsertDriveFileIcon' - expect(avatar.find('SvgIcon').length).toBe(1); + expect(avatar.find('SvgIcon')).toHaveLength(1); // No img element is rendered - expect(avatar.find('img').length).toBe(0); + expect(avatar.find('img')).toHaveLength(0); }); }); diff --git a/client/app/lib/components/redux-form/SingleFileInput/__test__/ImagePreview.test.js b/client/app/lib/components/redux-form/SingleFileInput/__test__/ImagePreview.test.js index 277cc02be78..e5cc95a44b2 100644 --- a/client/app/lib/components/redux-form/SingleFileInput/__test__/ImagePreview.test.js +++ b/client/app/lib/components/redux-form/SingleFileInput/__test__/ImagePreview.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { mount } from 'enzyme'; import ImagePreview from '../ImagePreview'; @@ -20,10 +19,8 @@ describe('', () => { ); const img = imagePreview.find('img').first(); - expect(imagePreview.find('.file-name').text().includes('bar')).toEqual( - true, - ); - expect(img.prop('src')).toEqual('foo'); + expect(imagePreview.find('.file-name').text()).toContain('bar'); + expect(img.prop('src')).toBe('foo'); expect(img.prop('icon')).toBeUndefined(); }); @@ -37,9 +34,9 @@ describe('', () => { }); // SvgIcon is the element of the placeholder 'InsertDriveFileIcon' - expect(imagePreview.find('SvgIcon').length).toBe(1); + expect(imagePreview.find('SvgIcon')).toHaveLength(1); // No img element is rendered - expect(imagePreview.find('img').length).toBe(0); + expect(imagePreview.find('img')).toHaveLength(0); }); it('renders a fallback preview when a non-image file is uploaded', () => { @@ -59,10 +56,8 @@ describe('', () => { ); const img = imagePreview.find('img').first(); - expect( - imagePreview.find('.file-name').text().includes('non-image file'), - ).toEqual(true); - expect(img.prop('src')).toEqual('foo'); + expect(imagePreview.find('.file-name').text()).toContain('non-image file'); + expect(img.prop('src')).toBe('foo'); }); it('does not render the delete button when no image is selected', () => { @@ -74,7 +69,7 @@ describe('', () => { }, }); - expect(imagePreview.find('Badge').exists()).toEqual(false); + expect(imagePreview.find('Badge').exists()).toBe(false); }); it('calls the cancel function when delete button is clicked', () => { @@ -89,7 +84,7 @@ describe('', () => { }, ); - expect(imagePreview.find('Badge').exists()).toEqual(true); + expect(imagePreview.find('Badge').exists()).toBe(true); imagePreview.find('IconButton').simulate('click'); expect(onCancel).toHaveBeenCalled(); }); diff --git a/client/app/lib/components/redux-form/SingleFileInput/__test__/index.test.js b/client/app/lib/components/redux-form/SingleFileInput/__test__/index.test.js index 2b786751e69..1de7352a5b3 100644 --- a/client/app/lib/components/redux-form/SingleFileInput/__test__/index.test.js +++ b/client/app/lib/components/redux-form/SingleFileInput/__test__/index.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { mount } from 'enzyme'; import SingleFileInput from '../index'; @@ -39,7 +38,7 @@ describe('', () => { }, ); - expect(singleFileInput.find('.file-name').exists()).toEqual(true); + expect(singleFileInput.find('.file-name').exists()).toBe(true); }); it('renders the provided previewComponent', () => { @@ -61,7 +60,7 @@ describe('', () => { }, ); - expect(singleFileInput.find('span').exists()).toEqual(true); + expect(singleFileInput.find('span').exists()).toBe(true); }); it('renders required error message', () => { @@ -91,6 +90,6 @@ describe('', () => { }, ); - expect(singleFileInput.find('.error-message').length).toBe(1); + expect(singleFileInput.find('.error-message')).toHaveLength(1); }); }); diff --git a/client/app/lib/components/redux-form/SingleFileInput/index.jsx b/client/app/lib/components/redux-form/SingleFileInput/index.jsx index c0e94730ea2..aa336f9414d 100644 --- a/client/app/lib/components/redux-form/SingleFileInput/index.jsx +++ b/client/app/lib/components/redux-form/SingleFileInput/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import { Component } from 'react'; import PropTypes from 'prop-types'; import { fieldMetaPropTypes } from 'redux-form'; import { FormattedMessage, intlShape } from 'react-intl'; @@ -43,24 +43,23 @@ const styles = { * } */ // TODO: Use the input element as a controller component - https://reactjs.org/docs/forms.html -class SingleFileInput extends React.Component { +class SingleFileInput extends Component { constructor(props) { super(props); this.state = { file: null }; this.updateStore(undefined); } - onDrop = (files) => { - this.setState({ file: files[0] }, this.updateStore(files[0])); - }; - onCancel = (e) => { this.setState({ file: null }, this.updateStore('')); e.stopPropagation(); }; + onDrop = (files) => { + this.setState({ file: files[0] }, this.updateStore(files[0])); + }; + updateStore = (file) => { - // eslint-disable-line react/sort-comp const { input: { onChange }, value: { url, name }, diff --git a/client/app/lib/components/redux-form/Toggle.jsx b/client/app/lib/components/redux-form/Toggle.jsx index 70fbbbd1bdc..e332ad5ce85 100644 --- a/client/app/lib/components/redux-form/Toggle.jsx +++ b/client/app/lib/components/redux-form/Toggle.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import MaterialToggle from 'material-ui/Toggle'; import { red500 } from 'material-ui/styles/colors'; @@ -9,18 +8,15 @@ const errorStyle = { color: red500, }; -// Toggle implementation with an error displayed at the bottom. -class Toggle extends React.Component { - render() { - const { errorText, ...props } = this.props; - return ( -
- - {errorText &&
{errorText}
} -
- ); - } -} +const Toggle = (props) => { + const { errorText, ...childProps } = props; + return ( +
+ + {errorText &&
{errorText}
} +
+ ); +}; Toggle.propTypes = { errorText: PropTypes.string, diff --git a/client/app/lib/components/redux-form/__test__/Toggle.test.js b/client/app/lib/components/redux-form/__test__/Toggle.test.js index dd87919b0fa..065725202e7 100644 --- a/client/app/lib/components/redux-form/__test__/Toggle.test.js +++ b/client/app/lib/components/redux-form/__test__/Toggle.test.js @@ -1,5 +1,4 @@ -import React from 'react'; -import shallowUntil from 'utils/shallowUntil'; +import shallowUntil from 'testUtils/shallowUntil'; import Toggle from '../Toggle'; describe('', () => { diff --git a/client/app/lib/containers/DeleteConfirmation/index.jsx b/client/app/lib/containers/DeleteConfirmation/index.jsx index 96cd9d94913..f83dca4f023 100644 --- a/client/app/lib/containers/DeleteConfirmation/index.jsx +++ b/client/app/lib/containers/DeleteConfirmation/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import ConfirmationDialog from 'lib/components/ConfirmationDialog'; diff --git a/client/app/lib/containers/NotificationPopup/index.jsx b/client/app/lib/containers/NotificationPopup/index.jsx index 4c53cd6dbae..e8feff6b62c 100644 --- a/client/app/lib/containers/NotificationPopup/index.jsx +++ b/client/app/lib/containers/NotificationPopup/index.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import NotificationBar, { notificationShape, diff --git a/client/app/lib/helpers/__test__/htmlFormatHelpers.test.js b/client/app/lib/helpers/__test__/htmlFormatHelpers.test.js index 57978e182a1..aaaba5bd860 100644 --- a/client/app/lib/helpers/__test__/htmlFormatHelpers.test.js +++ b/client/app/lib/helpers/__test__/htmlFormatHelpers.test.js @@ -5,15 +5,15 @@ describe('stripHtmlTags', () => { const str1 = '

foo bar baz

Link to bar'; const str2 = 'hello
to more tests!'; - expect(stripHtmlTags(str1)).toEqual(' foo bar baz Link to bar'); - expect(stripHtmlTags(str2)).toEqual('hello to more tests!'); + expect(stripHtmlTags(str1)).toBe(' foo bar baz Link to bar'); + expect(stripHtmlTags(str2)).toBe('hello to more tests!'); }); it('handles empty or null strings', () => { const str1 = null; const str2 = ''; - expect(stripHtmlTags(str1)).toEqual(''); - expect(stripHtmlTags(str2)).toEqual(''); + expect(stripHtmlTags(str1)).toBe(''); + expect(stripHtmlTags(str2)).toBe(''); }); }); diff --git a/client/app/lib/helpers/renderNotificationBar.jsx b/client/app/lib/helpers/renderNotificationBar.jsx index 6f2f0b96326..60e5f479b9e 100644 --- a/client/app/lib/helpers/renderNotificationBar.jsx +++ b/client/app/lib/helpers/renderNotificationBar.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import NotificationBar from 'lib/components/NotificationBar'; diff --git a/client/app/lib/initializers/confirm-dialog.jsx b/client/app/lib/initializers/confirm-dialog.jsx index 8381b13f2b5..b4b9c3bf5c0 100644 --- a/client/app/lib/initializers/confirm-dialog.jsx +++ b/client/app/lib/initializers/confirm-dialog.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import ProviderWrapper from 'lib/components/ProviderWrapper'; import RailsConfirmationDialog from 'lib/components/RailsConfirmationDialog'; @@ -123,6 +122,6 @@ function overrideConfirmDialog() { }; } -$(document).ready(() => { +$(() => { overrideConfirmDialog(); }); diff --git a/client/app/lib/initializers/popup-notifier.jsx b/client/app/lib/initializers/popup-notifier.jsx index 7dfef28d1d6..e45554f05d4 100644 --- a/client/app/lib/initializers/popup-notifier.jsx +++ b/client/app/lib/initializers/popup-notifier.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import { render } from 'react-dom'; import { Router } from 'react-router-dom'; import history from 'lib/history'; @@ -6,7 +5,7 @@ import ProviderWrapper from 'lib/components/ProviderWrapper'; import PopupNotifier from 'course/user-notification/containers/PopupNotifier'; import storeCreator from 'course/user-notification/store'; -$(document).ready(() => { +$(() => { const mountNode = document.getElementById('popup-notifier'); if (mountNode) { diff --git a/client/app/lib/styles/MaterialSummernote.scss b/client/app/lib/styles/MaterialSummernote.scss index 1737166d32f..7d251b983bf 100644 --- a/client/app/lib/styles/MaterialSummernote.scss +++ b/client/app/lib/styles/MaterialSummernote.scss @@ -21,908 +21,6 @@ white-space: nowrap; } - .btn.active.focus, - .btn.active:focus, - .btn.focus, - .btn:active.focus, - .btn:active:focus, - .btn:focus { - outline: 0 !important; - outline-offset: -2px; - } - - .btn.focus, - .btn:focus, - .btn:hover { - color: #333333; - text-decoration: none; - } - - .btn.active, - .btn:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - outline: 0; - } - - .btn.disabled, - .btn[disabled], - fieldset[disabled] .btn { - box-shadow: none; - cursor: not-allowed; - filter: alpha(opacity = 65); - opacity: 0.65; - } - - a.btn.disabled, - fieldset[disabled] a.btn { - pointer-events: none; - } - - .btn-default { - background-color: #ffffff; - border-color: #cccccc; - color: #333333; - } - - .btn-default.active, - .btn-default:active, - .btn-default:hover, - .open > .dropdown-toggle.btn-default { - background-color: #e6e6e6; - border-color: #adadad; - color: #333333; - } - - .btn-default.active.focus, - .btn-default.active:focus, - .btn-default.active:hover, - .btn-default:active.focus, - .btn-default:active:focus, - .btn-default:active:hover, - .open > .dropdown-toggle.btn-default.focus, - .open > .dropdown-toggle.btn-default:focus, - .open > .dropdown-toggle.btn-default:hover { - background-color: #d4d4d4; - border-color: #8c8c8c; - color: #333333; - } - - .btn-default.focus, - .btn-default.focus.focus, - .btn-default.focus:focus, - .btn-default.focus:hover, - .btn-default:active, - .btn-default:active.focus, - .btn-default:active:focus, - .btn-default:active:hover, - .btn-default:focus, - .btn-default:focus.focus, - .btn-default:focus:focus, - .btn-default:focus:hover, - .btn-default:hover, - .btn-default:hover.focus, - .btn-default:hover:focus, - .btn-default:hover:hover, - .open > .dropdown-toggle.btn-default, - .open > .dropdown-toggle.btn-default.focus, - .open > .dropdown-toggle.btn-default:focus, - .open > .dropdown-toggle.btn-default:hover { - background-color: #ffffff; - border-color: transparent; - color: #333333; - } - - .btn-default.disabled, - .btn-default.disabled.focus, - .btn-default.disabled:active, - .btn-default.disabled:focus, - .btn-default.disabled:hover, - .btn-default[disabled], - .btn-default[disabled].focus, - .btn-default[disabled]:active, - .btn-default[disabled]:focus, - .btn-default[disabled]:hover, - fieldset[disabled] .btn-default, - fieldset[disabled] .btn-default.focus, - fieldset[disabled] .btn-default:active, - fieldset[disabled] .btn-default:focus, - fieldset[disabled] .btn-default:hover { - background-color: #ffffff; - border-color: #cccccc; - } - - .btn-default .badge { - background-color: #333333; - color: #ffffff; - } - - .btn-group-lg > .btn, - .btn-lg { - border-radius: 2px; - font-size: 17px; - line-height: 1.3333333; - padding: 10px 16px; - } - - .btn-group-sm > .btn, - .btn-sm { - border-radius: 2px; - font-size: 12px; - line-height: 1.5; - padding: 5px 10px; - } - - .dropdown-header, - .dropdown-menu > li > a { - line-height: 1.42857143; - white-space: nowrap; - } - - .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, - .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle, - .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - } - - .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child, - .btn-group > .btn:last-child:not(:first-child), - .btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; - } - - .btn-group-vertical > .btn:not(:first-child):not(:last-child), - .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn, - .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; - } - - .caret { - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid; - display: inline-block; - height: 0; - margin-left: 2px; - width: 0; - } - - .dropdown-toggle:focus { - outline: 0; - } - - .dropdown-menu { - background-clip: padding-box; - background-color: #ffffff; - display: none; - font-size: 13px; - left: 0; - list-style: none; - min-width: 160px; - position: absolute; - text-align: left; - z-index: 9; - } - - .dropdown-menu-right, - .dropdown-menu.pull-right { - left: auto; - right: 0; - } - - .dropdown-menu .divider { - background-color: rgba(0, 0, 0, 0.08); - height: 1px; - margin: 8px 0; - overflow: hidden; - } - - .dropdown-menu > li > a { - clear: both; - color: #333333; - display: block; - font-weight: 400; - } - - .dropdown-menu > li > a:focus, - .dropdown-menu > li > a:hover { - background-color: rgba(0, 0, 0, 0.075); - color: #333333; - text-decoration: none; - } - - .dropdown-menu > .active > a, - .dropdown-menu > .active > a:focus, - .dropdown-menu > .active > a:hover { - background-color: rgba(0, 0, 0, 0.075); - color: #333333; - outline: 0; - text-decoration: none; - } - - .dropdown-menu > .disabled > a, - .dropdown-menu > .disabled > a:focus, - .dropdown-menu > .disabled > a:hover { - color: #e4e4e4; - } - - .dropdown-menu > .disabled > a:focus, - .dropdown-menu > .disabled > a:hover { - background-color: transparent; - cursor: not-allowed; - text-decoration: none; - } - - .open > .dropdown-menu { - display: block; - } - - .open > a { - outline: 0; - } - - .dropdown-menu-left { - left: 0; - right: auto; - } - - .dropdown-header { - display: block; - font-size: 12px; - } - - .dropdown-backdrop { - bottom: 0; - left: 0; - position: fixed; - right: 0; - top: 0; - z-index: -1; - } - - .pull-right > .dropdown-menu { - left: auto; - right: 0; - } - - .dropup .caret, - .navbar-fixed-bottom .dropdown .caret { - border-bottom: 4px solid; - border-top: 0; - content: ''; - } - - .dropup .dropdown-menu, - .navbar-fixed-bottom .dropdown .dropdown-menu { - bottom: 100%; - margin-bottom: 2px; - top: auto; - } - - .btn-group, - .btn-group-vertical { - display: inline-block; - position: relative; - } - - .btn-group-vertical > .btn, - .btn-group > .btn { - float: left; - position: relative; - } - - .btn-group-vertical > .btn.active, - .btn-group-vertical > .btn:active, - .btn-group-vertical > .btn:focus, - .btn-group-vertical > .btn:hover, - .btn-group > .btn.active, - .btn-group > .btn:active, - .btn-group > .btn:focus, - .btn-group > .btn:hover { - z-index: 2; - } - - .btn-group .btn + .btn, - .btn-group .btn + .btn-group, - .btn-group .btn-group + .btn, - .btn-group .btn-group + .btn-group { - margin-left: -1px; - } - - .btn-toolbar { - margin-left: -5px; - } - - .btn-toolbar > .btn, - .btn-toolbar > .btn-group, - .btn-toolbar > .input-group { - margin-left: 5px; - } - - .btn .caret, - .btn-group > .btn:first-child { - margin-left: 0; - } - - .btn-group .dropdown-toggle:active, - .btn-group.open .dropdown-toggle { - outline: 0; - } - - .btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - } - - .btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - } - - .btn-group.open .dropdown-toggle { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - } - - .btn-group.open .dropdown-toggle.btn-link { - box-shadow: none; - } - - .btn-lg .caret { - border-width: 5px 5px 0; - } - - .btn-group-vertical > .btn, - .btn-group-vertical > .btn-group, - .btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - max-width: 100%; - width: 100%; - } - - .btn-group-vertical > .btn-group > .btn { - float: none; - } - - .btn-group-vertical > .btn + .btn, - .btn-group-vertical > .btn + .btn-group, - .btn-group-vertical > .btn-group + .btn, - .btn-group-vertical > .btn-group + .btn-group { - margin-left: 0; - margin-top: -1px; - } - - .btn-group-vertical > .btn:first-child:not(:last-child) { - border-radius: 2px 2px 0 0; - } - - .btn-group-vertical > .btn:last-child:not(:first-child) { - border-radius: 0 0 2px 2px; - } - - .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; - } - - // prettier-ignore - .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, - .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - - // prettier-ignore - .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; - } - - .btn-group-justified { - border-collapse: separate; - display: table; - table-layout: fixed; - width: 100%; - } - - .btn-group-justified > .btn, - .btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; - } - - .btn-group-justified > .btn-group .btn { - width: 100%; - } - - .btn-group-justified > .btn-group .dropdown-menu { - left: auto; - } - - .panel { - background-color: #ffffff; - border-radius: 2px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - margin-bottom: 18px; - } - - .panel-body { - padding: 15px; - } - - .panel-heading { - border-bottom: 1px solid transparent; - border-top-left-radius: 1px; - border-top-right-radius: 1px; - } - - .panel-default { - border-color: #dddddd; - } - - .panel-default > .panel-heading { - background-color: #f5f5f5; - border-color: #dddddd; - color: #333333; - } - - .panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; - } - - .panel-default > .panel-heading .badge { - background-color: #333333; - color: #f5f5f5; - } - - .close { - color: #000000; - float: right; - font-size: 19.5px; - line-height: 1; - } - - .close:focus, - .close:hover { - color: #000000; - cursor: pointer; - filter: alpha(opacity = 50); - opacity: 0.5; - text-decoration: none; - } - - button.close { - background: 0 0; - border: 0; - cursor: pointer; - padding: 0; - } - - .modal-content, - .popover { - background-clip: padding-box; - } - - .modal-open { - overflow: hidden; - } - - .modal { - display: none; - outline: 0; - overflow: hidden; - position: fixed; - z-index: 1050; - } - - .modal.fade .modal-dialog { - transform: translate(0, -25%); - transition: transform 0.3s ease-out; - } - - .modal.in .modal-dialog { - transform: translate(0, 0); - } - - .modal-open .modal { - overflow-x: hidden; - overflow-y: auto; - } - - .modal-dialog { - margin: 10px; - position: relative; - width: auto; - } - - .modal-content { - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 2px; - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - outline: 0; - position: relative; - } - - .modal-backdrop { - background-color: #000000; - position: fixed; - z-index: 11; - } - - .modal-backdrop.fade { - filter: alpha(opacity = 0); - opacity: 0; - } - - .modal-backdrop.in { - filter: alpha(opacity = 20); - opacity: 0.2; - } - - .modal-header { - border-bottom: 1px solid transparent; - padding: 15px; - } - - .modal-header .close { - margin-top: -2px; - } - - .modal-title { - margin: 0; - } - - .popover, - .tooltip { - font-weight: 400; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - } - - .modal-body { - padding: 15px; - position: relative; - } - - .modal-footer { - border-top: 1px solid transparent; - padding: 15px; - text-align: right; - } - - .modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; - } - - .modal-footer .btn-group .btn + .btn { - margin-left: -1px; - } - - .modal-footer .btn-block + .btn-block { - margin-left: 0; - } - - .modal-scrollbar-measure { - height: 50px; - overflow: scroll; - position: absolute; - top: -9999px; - width: 50px; - } - - @media (min-width: 768px) { - .modal-dialog { - margin: 30px auto; - width: 600px; - } - - .modal-content { - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - - .modal-sm { - width: 300px; - } - } - - .tooltip.top-left .tooltip-arrow, - .tooltip.top-right .tooltip-arrow { - border-top-color: #737373; - border-width: 5px 5px 0; - bottom: 0; - margin-bottom: -5px; - } - - @media (min-width: 992px) { - .modal-lg { - width: 900px; - } - } - - .tooltip { - display: block; - filter: alpha(opacity = 0); - font-size: 12px; - opacity: 0; - position: absolute; - z-index: 1070; - } - - .tooltip.in { - filter: alpha(opacity = 100); - opacity: 1; - } - - .tooltip.top { - margin-top: -3px; - padding: 5px 0; - } - - .tooltip.right { - margin-left: 3px; - padding: 0 5px; - } - - .tooltip.bottom { - margin-top: 3px; - padding: 5px 0; - } - - .tooltip.left { - margin-left: -3px; - padding: 0 5px; - } - - .tooltip-inner { - background-color: #737373; - border-radius: 2px; - color: #ffffff; - max-width: 200px; - text-align: center; - } - - .tooltip-arrow { - border-color: transparent; - border-style: solid; - height: 0; - position: absolute; - width: 0; - } - - .tooltip.top .tooltip-arrow { - border-top-color: #737373; - border-width: 5px 5px 0; - bottom: 0; - left: 50%; - margin-left: -5px; - } - - .tooltip.top-left .tooltip-arrow { - right: 5px; - } - - .tooltip.top-right .tooltip-arrow { - left: 5px; - } - - .tooltip.right .tooltip-arrow { - border-right-color: #737373; - border-width: 5px 5px 5px 0; - left: 0; - margin-top: -5px; - top: 50%; - } - - .tooltip.left .tooltip-arrow { - border-left-color: #737373; - border-width: 5px 0 5px 5px; - margin-top: -5px; - right: 0; - top: 50%; - } - - .tooltip.bottom .tooltip-arrow, - .tooltip.bottom-left .tooltip-arrow, - .tooltip.bottom-right .tooltip-arrow { - border-bottom-color: #737373; - border-width: 0 5px 5px; - top: 0; - } - - .tooltip.bottom .tooltip-arrow { - left: 50%; - margin-left: -5px; - } - - .tooltip.bottom-left .tooltip-arrow { - margin-top: -5px; - right: 5px; - } - - .tooltip.bottom-right .tooltip-arrow { - left: 5px; - margin-top: -5px; - } - - .popover { - background-color: #ffffff; - border: 1px solid #ffffff; - border-radius: 2px; - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - display: none; - font-size: 13px; - left: 0; - max-width: 276px; - padding: 1px; - position: absolute; - top: 0; - z-index: 9; - } - - .popover.top { - margin-top: -10px; - } - - .popover.right { - margin-left: 10px; - } - - .popover.bottom { - margin-top: 10px; - } - - .popover.left { - margin-left: -10px; - } - - .popover-title { - background-color: #ffffff; - border-radius: 1px 1px 0 0; - margin: 0; - } - - .popover > .arrow, - .popover > .arrow::after { - border-color: transparent; - border-style: solid; - display: block; - height: 0; - position: absolute; - width: 0; - } - - .popover > .arrow { - border-width: 11px; - } - - .popover > .arrow::after { - border-width: 10px; - } - - .popover.top > .arrow { - border-bottom-width: 0; - border-top-color: #ffffff; - bottom: -11px; - left: 50%; - margin-left: -11px; - } - - .popover.top > .arrow::after { - border-bottom-width: 0; - border-top-color: #ffffff; - bottom: 1px; - content: ' '; - margin-left: -10px; - } - - .popover.left > .arrow::after, - .popover.right > .arrow::after { - bottom: -10px; - content: ' '; - } - - .popover.right > .arrow { - border-left-width: 0; - border-right-color: #ffffff; - left: -11px; - margin-top: -11px; - top: 50%; - } - - .popover.right > .arrow::after { - border-left-width: 0; - border-right-color: #ffffff; - left: 1px; - } - - .popover.bottom > .arrow { - border-bottom-color: #ffffff; - border-top-width: 0; - left: 50%; - margin-left: -11px; - top: -11px; - } - - .popover.bottom > .arrow::after { - border-bottom-color: #ffffff; - border-top-width: 0; - content: ' '; - margin-left: -10px; - top: 1px; - } - - .popover.left > .arrow { - border-left-color: #ffffff; - border-right-width: 0; - margin-top: -11px; - right: -11px; - top: 50%; - } - - .popover.left > .arrow::after { - border-left-color: #ffffff; - border-right-width: 0; - right: 1px; - } - - .btn-group-vertical > .btn-group::after, - .btn-group-vertical > .btn-group::before, - .btn-toolbar::after, - .btn-toolbar::before, - .clearfix::after, - .clearfix::before, - .container-fluid::after, - .container-fluid::before, - .container::after, - .container::before, - .dl-horizontal dd::after, - .dl-horizontal dd::before, - .form-horizontal .form-group::after, - .form-horizontal .form-group::before, - .modal-footer::after, - .modal-footer::before, - .modal-header::after, - .modal-header::before, - .nav::after, - .nav::before, - .navbar-collapse::after, - .navbar-collapse::before, - .navbar-header::after, - .navbar-header::before, - .navbar::after, - .navbar::before, - .pager::after, - .pager::before, - .panel-body::after, - .panel-body::before, - .row::after, - .row::before { - content: ' '; - display: table; - } - - .close { - filter: alpha(opacity = 50); - opacity: 0.5; - } - - .close:hover { - color: inherit; - filter: alpha(opacity = 100); - opacity: 1; - } - *, :active, :focus, @@ -930,245 +28,6 @@ outline: 0 !important; } - p { - margin-bottom: 20px; - } - - .dropdown:not([data-animation]) .dropdown-menu { - animation-duration: 0.3s; - animation-fill-mode: both; - animation-name: fadeIn; - } - - .dropdown-menu { - border: 0; - border-radius: 3px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - margin: 0; - padding: 10px 0; - top: -1px; - } - - .btn-group.open .dropdown-toggle, - .progress, - .progress .progress-bar { - box-shadow: none; - } - - .dropdown-menu > li > a { - padding: 10px 20px; - transition: background-color; - transition-duration: 0.3s; - } - - .dropdown-menu[class*='bgm-'] > li > a { - color: #ffffff; - } - - .dropup .dropdown-menu { - bottom: -2px; - } - - .dropdown-menu-lg { - width: 300px; - } - - .dropdown-header { - color: #b1b1b1; - font-weight: 400; - margin-top: 10px; - padding: 3px 17px; - text-transform: uppercase; - } - - .btn { - border: 0; - text-transform: uppercase; - } - - .btn[class*='bgm-']:not(.bgm-white) { - color: #ffffff; - } - - .btn .caret { - margin-top: -3px; - } - - .btn:not(.btn-link) { - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.16), 0 2px 10px rgba(0, 0, 0, 0.12); - } - - .btn-group-vertical:not(.bootstrap-select), - .btn-group:not(.bootstrap-select) { - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.3); - } - - .btn-group .btn, - .btn-group .btn-group, - .btn-group .btn:active, - .btn-group .btn:focus, - .btn-group-vertical .btn, - .btn-group-vertical .btn-group, - .btn-group-vertical .btn:active, - .btn-group-vertical .btn:focus, - .form-control, - input:active, - input:focus { - box-shadow: none !important; - } - - .btn-group .btn, - .btn-group-vertical .btn { - margin: 0; - } - - .btn-group-xs > .btn, - .btn-xs { - border-radius: 2px; - font-size: 11px; - line-height: 1.5; - padding: 2px 5px; - } - - label { - font-weight: 500; - } - - input:active, - input:focus { - outline: 0; - } - - .popover { - box-shadow: 0 2px 30px rgba(0, 0, 0, 0.2); - } - - .popover-title { - border-bottom: 0; - font-size: 12px; - padding: 15px; - text-transform: uppercase; - } - - .popover-title + .popover-content { - padding-top: 0; - } - - .popover-content { - padding: 15px; - } - - .popover-content p { - margin-bottom: 0; - } - - .modal .modal-footer .btn-link:hover, - .modal:not([data-modal-color]) .modal-footer .btn-link:hover { - background-color: #eeeeee; - } - - @media (min-width: 768px) { - .modal .modal-dialog, - .modal::before { - display: inline-block; - vertical-align: middle; - } - - .modal { - text-align: center; - } - - .modal::before { - content: ''; - height: 100%; - width: 1px; - } - - .modal .modal-dialog { - margin: 10px auto; - text-align: left; - } - } - - .modal .modal-content { - border: 0; - border-radius: 2px; - box-shadow: 0 5px 20px rgba(0, 0, 0, 0.07); - } - - .modal .modal-header { - padding: 23px 26px; - } - - .modal .modal-title { - font-size: 15px; - font-weight: 400; - } - - .modal .modal-title small { - display: block; - margin-top: 8px; - } - - .modal .modal-body { - padding: 0 26px 10px; - } - - .panel { - border: 0; - box-shadow: none; - } - - .panel-heading { - padding: 0; - } - - .panel-title > a { - display: block; - font-size: 13px; - padding: 10px 15px; - } - - .note-btn-group.btn-group { - margin: 0; - } - - .note-editor .note-toolbar, - .note-editor .popover-content, - .note-popover .note-toolbar, - .note-popover .popover-content { - background: #ffffff; - border-color: #e4e4e4; - margin: 0; - padding: 5px 10px; - text-align: left; - } - - .note-editor .note-toolbar > .btn-group, - .note-editor .popover-content > .btn-group, - .note-popover .note-toolbar > .btn-group, - .note-popover .popover-content > .btn-group { - box-shadow: none; - display: inline-block; - float: none; - } - - .note-editor .note-toolbar > .btn-group .btn, - .note-editor .popover-content > .btn-group .btn, - .note-popover .note-toolbar > .btn-group .btn, - .note-popover .popover-content > .btn-group .btn { - margin: 0 1px; - padding: 0 10px; - } - - .note-editor .note-toolbar > .btn-group > .active, - .note-editor .popover-content > .btn-group > .active, - .note-popover .note-toolbar > .btn-group > .active, - .note-popover .popover-content > .btn-group > .active { - background: #00bcd4; - color: #ffffff; - } - .note-editor .note-toolbar .btn, .note-editor .popover-content .btn, .note-popover .note-toolbar .btn, @@ -1178,74 +37,15 @@ height: 35px; } - .note-editor .note-toolbar .btn:active, - .note-editor .popover-content .btn:active, - .note-popover .note-toolbar .btn:active, - .note-popover .popover-content .btn:active { - box-shadow: none; - } - - .note-editor .note-toolbar .note-palette-title, - .note-editor .popover-content .note-palette-title, - .note-popover .note-toolbar .note-palette-title, - .note-popover .popover-content .note-palette-title { - border: 0 !important; - font-size: 13px !important; - margin: 0 !important; - padding: 10px 0 !important; - text-align: center !important; - } - - .note-editor .note-toolbar .note-color-reset, - .note-editor .popover-content .note-color-reset, - .note-popover .note-toolbar .note-color-reset, - .note-popover .popover-content .note-color-reset { - background: 0 0; - margin: 0 !important; - padding: 0 0 10px !important; - text-align: center; - } - - .note-editor .note-toolbar .note-color .dropdown-menu, - .note-editor .popover-content .note-color .dropdown-menu, - .note-popover .note-toolbar .note-color .dropdown-menu, - .note-popover .popover-content .note-color .dropdown-menu { - min-width: 335px; - } - - .note-editor .note-statusbar .note-resizebar, - .note-popover .note-statusbar .note-resizebar { - border-color: #e8e8e8; - } - - .note-editor .note-statusbar .note-resizebar .note-icon-bar, - .note-popover .note-statusbar .note-resizebar .note-icon-bar { - border-color: #bcbcbc; - } - - .note-editor .fa, - .note-popover .fa { - font-size: 20px; - font-style: normal; - vertical-align: middle; - } - - .note-editor .note-air-popover .arrow, - .note-popover .note-air-popover .arrow { - left: 20px; - } - - .note-editor { + .note-editor, + .note-editor.note-airframe { border: 1px solid #e4e4e4; overflow: visible; } - .note-editor .note-editable { - padding: 20px 23px; - } - - .note-toolbar-wrapper { - height: auto !important; + .note-editor .note-editing-area .note-editable, + .note-editor.note-airframe .note-editing-area .note-editable { + padding: 10px; } } // scss-lint:enable ImportantRule MergeableSelector QualifyingElement ColorVariable diff --git a/client/app/lib/types.js b/client/app/lib/types.js index 1e5b7cfe9de..7e61c5c6a70 100644 --- a/client/app/lib/types.js +++ b/client/app/lib/types.js @@ -4,7 +4,7 @@ export const lessonPlanTypesGroups = PropTypes.arrayOf( PropTypes.shape({ id: PropTypes.string, milestone: PropTypes.object, - items: PropTypes.arrayOf({}), + items: PropTypes.arrayOf(PropTypes.object), }), ); diff --git a/client/package.json b/client/package.json index 7cd000649cf..8cfe6716f55 100644 --- a/client/package.json +++ b/client/package.json @@ -9,13 +9,13 @@ "scripts": { "test": "TZ=Asia/Singapore yarn run jest --coverage", "testci": "TZ=Asia/Singapore yarn run jest --maxWorkers=4 --coverage", - "build:test": "export NODE_ENV=test && yarn run build:translations && webpack -pw", - "build:production": "export NODE_ENV=production && yarn run build:translations && webpack -p", - "build:development": "yarn run build:translations && webpack-dev-server", + "build:test": "export NODE_ENV=test && yarn run build:translations && webpack -w --node-env=production", + "build:production": "export NODE_ENV=production && yarn run build:translations && webpack --node-env=production", + "build:development": "yarn run build:translations && webpack serve", "build:translations": "babel-node scripts/aggregate-translations.js", "extract-translations": "yarn run build:production && babel-node scripts/extract-translations.js", "lint-src": "eslint . --ext .js --ext .jsx --cache --ignore-pattern '**/__test__/**' --ignore-pattern 'coverage/**'", - "lint-tests": "eslint . --ext .test.js --ext .test.jsx --cache -c .eslintrc.test", + "lint-tests": "eslint . --ext .test.js --ext .test.jsx --cache", "lint": "yarn run lint-src && yarn run lint-tests && prettier --check \"**/*.{js,jsx}\"", "lint-fix": "yarn run lint-src --fix && yarn run lint-tests --fix && prettier --write \"**/*.{js,jsx}\"", "postinstall": "cd vendor/recorderjs && NODE_ENV=development yarn install" @@ -25,6 +25,7 @@ "client/node_modules" ], "jest": { + "testEnvironment": "jsdom", "transform": { "^.+\\.(js|jsx)$": "/node_modules/babel-jest" }, @@ -51,7 +52,7 @@ ".scss$": "/SassStub.js", "^api(.*)$": "/app/api$1", "^lib(.*)$": "/app/lib$1", - "^utils(.*)$": "/app/__test__/utils$1", + "^testUtils(.*)$": "/app/__test__/utils$1", "^course(.*)$": "/app/bundles/course$1" }, "coveragePathIgnorePatterns": [ @@ -60,99 +61,102 @@ ] }, "dependencies": { - "@babel/cli": "^7.4.4", - "@babel/core": "^7.4.5", - "@babel/node": "^7.4.5", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/polyfill": "^7.4.4", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "@babel/runtime": "^7.15.3", - "@date-io/moment": "^1.3.6", - "@material-ui/core": "^3.8.3", + "@babel/cli": "^7.16.0", + "@babel/core": "^7.16.5", + "@babel/node": "^7.16.5", + "@babel/plugin-proposal-class-properties": "^7.16.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/polyfill": "^7.12.1", + "@babel/preset-env": "^7.16.5", + "@babel/preset-react": "^7.16.5", + "@babel/runtime": "^7.16.5", + "@date-io/moment": "^1.3.13", + "@material-ui/core": "^4.12.3", + "@material-ui/pickers": "^3.3.10", "ace-builds": "^1.4.13", - "axios": "^0.21.2", - "babel-loader": "^8.0.6", - "babel-plugin-react-intl": "^3.1.1", - "chart.js": "^2.8.0", - "css-loader": "^1.0.0", - "expose-loader": "^0.7.5", - "fabric": "2.5.0", - "glob": "^7.1.4", + "axios": "^0.21.4", + "babel-loader": "^8.2.3", + "babel-plugin-react-intl": "^7.9.4", + "chart.js": "^3.7.0", + "css-loader": "^6.5.1", + "dnd-core": "^14.0.1", + "expose-loader": "^3.1.0", + "fabric": "^4.6.0", + "glob": "^7.2.0", "hard-source-webpack-plugin": "^0.13.1", - "history": "^4.9.0", - "immutable": "^3.8.1", + "history": "^5.2.0", + "immutable": "^3.8.2", "intl": "^1.2.5", - "jquery": "3.4.1", - "jquery-ui": "^1.12.1", - "json-loader": "^0.5.4", + "jquery": "^3.6.0", + "jquery-ui": "^1.13.0", + "json-loader": "^0.5.7", "material-ui": "^0.20.2", "material-ui-chip-input": "^0.19.0", - "material-ui-pickers": "^2.2.4", "mirror-creator": "1.1.0", - "mkdirp": "^0.5.1", - "moment": "^2.24.0", - "moment-timezone": "^0.5.25", - "node-sass": "^4.12.0", - "prop-types": "^15.7.2", - "rc-slider": "^8.6.11", - "react": "^16.8.6", + "mkdirp": "^1.0.4", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "node-sass": "^6.0.1", + "prop-types": "^15.8.0", + "rc-slider": "^9.7.5", + "react": "^17.0.2", "react-ace": "^9.5.0", - "react-chartjs-2": "^2.7.6", - "react-color": "^2.17.3", - "react-dnd": "^5.0.0", - "react-dnd-html5-backend": "^5.0.1", - "react-dom": "^16.8.6", - "react-dropzone": "^5.0.1", - "react-hot-keys": "^2.6.2", + "react-chartjs-2": "^3.3.0", + "react-color": "^2.19.3", + "react-dnd": "^14.0.4", + "react-dnd-html5-backend": "^14.0.2", + "react-dom": "^17.0.2", + "react-dropzone": "^5.1.1", + "react-hot-keys": "^2.7.1", "react-intl": "^2.9.0", - "react-overlays": "^0.8.3", - "react-player": "^1.11.0", - "react-redux": "^5.0.7", + "react-overlays": "^5.1.1", + "react-player": "^2.9.0", + "react-redux": "^5.1.2", "react-router": "^4.3.1", "react-router-dom": "^4.3.1", - "react-scroll": "^1.7.11", - "react-summernote": "github:ekowidianto/react-summernote", - "react-tooltip": "^3.10.0", - "redux": "^4.0.1", - "redux-form": "^7.4.2", + "react-scroll": "^1.8.4", + "react-summernote": "github:zhuhanming/react-summernote#v1.2", + "react-tooltip": "^4.2.21", + "redux": "^4.1.1", + "redux-form": "^7.4.3", "redux-immutable": "^4.0.0", - "redux-persist": "^5.10.0", + "redux-persist": "^6.0.0", "redux-promise": "^0.6.0", - "redux-thunk": "^2.3.0", - "reselect": "^4.0.0", - "sass-loader": "^7.1.0", - "script-loader": "^0.7.0", - "style-loader": "^0.23.1", - "webfontloader": "^1.6.27", - "webpack": "^4.32.2", - "webpack-cli": "^3.3.2", - "webpack-manifest-plugin": "^2.0.4" + "redux-thunk": "^2.4.1", + "reselect": "^4.1.5", + "sass-loader": "^12.4.0", + "script-loader": "^0.7.2", + "style-loader": "^3.3.1", + "webfontloader": "^1.6.28", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1", + "webpack-manifest-plugin": "^4.0.2" }, "devDependencies": { - "axios-mock-adapter": "^1.16.0", + "@wojtekmaj/enzyme-adapter-react-17": "^0.6.6", + "axios-mock-adapter": "^1.20.0", "babel-core": "^7.0.0-bridge.0", - "babel-eslint": "^10.0.1", - "babel-jest": "^24.8.0", - "enzyme": "^3.9.0", - "enzyme-adapter-react-16": "^1.13.2", - "enzyme-to-json": "^3.3.5", + "babel-eslint": "^10.1.0", + "babel-jest": "^27.4.5", + "enzyme": "^3.11.0", + "enzyme-to-json": "^3.6.2", "eslint": "^7.32.0", "eslint-config-airbnb": "^18.2.1", "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-webpack": "^0.13.1", - "eslint-plugin-import": "^2.24.2", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.25.1", - "jest": "^24.8.0", - "jest-localstorage-mock": "2.4.0", - "prettier": "^2.4.0", - "react-dnd-test-backend": "^7.4.4", - "react-test-renderer": "^16.8.6", + "eslint-import-resolver-webpack": "^0.13.2", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.2", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "jest": "^27.4.5", + "jest-localstorage-mock": "^2.4.18", + "prettier": "^2.5.1", + "react-dnd-test-backend": "^14.0.1", + "react-test-renderer": "^17.0.2", "redux-logger": "^3.0.6", - "webpack-dev-server": "^3.4.1" + "webpack-dev-server": "^4.7.1" }, "license": "MIT", "repository": "git+https://github.com/Coursemology/coursemology2.git", diff --git a/client/webpack.config.js b/client/webpack.config.js index 99c773de94b..4f8a3ccd930 100644 --- a/client/webpack.config.js +++ b/client/webpack.config.js @@ -1,10 +1,9 @@ const webpack = require('webpack'); const path = require('path'); -const ManifestPlugin = require('webpack-manifest-plugin'); +const { WebpackManifestPlugin } = require('webpack-manifest-plugin'); const HardSourceWebpackPlugin = require('hard-source-webpack-plugin'); const env = process.env.NODE_ENV || 'development'; -const production = env === 'production'; const development = env === 'development'; const travis = process.env.TRAVIS === 'true'; @@ -21,7 +20,7 @@ const config = { }, output: { - filename: production ? '[name]-[chunkhash].js' : '[name].js', + filename: '[name].js', path: path.join(__dirname, '..', 'public', 'webpack'), publicPath: '/webpack/', }, @@ -32,19 +31,29 @@ const config = { lib: path.resolve('./app/lib'), api: path.resolve('./app/api'), course: path.resolve('./app/bundles/course'), + testUtils: path.resolve('./app/__test__/utils'), }, }, optimization: { splitChunks: { chunks: 'all', + name: (_module, chunks, cacheGroupKey) => { + const allChunksNames = chunks.map((chunk) => chunk.name).join('~'); + const prefix = + cacheGroupKey === 'defaultVendors' ? 'vendors' : cacheGroupKey; + return `${prefix}~${allChunksNames}`; + }, }, + moduleIds: 'deterministic', }, plugins: [ - new webpack.IgnorePlugin(/__test__/), - new webpack.HashedModuleIdsPlugin(), - new ManifestPlugin({ publicPath: '/webpack/', writeToFileEmit: true }), + new webpack.IgnorePlugin({ resourceRegExp: /__test__/ }), + new WebpackManifestPlugin({ + publicPath: '/webpack/', + writeToFileEmit: true, + }), // Do not require all locales in moment new webpack.ContextReplacementPlugin( /moment\/locale$/, @@ -82,8 +91,9 @@ const config = { loader: 'css-loader', options: { importLoaders: 1, - modules: true, - localIdentName: '[path]___[name]__[local]___[hash:base64:5]', + modules: { + localIdentName: '[path]___[name]__[local]___[hash:base64:5]', + }, }, }, 'sass-loader', @@ -99,25 +109,17 @@ const config = { }, { test: require.resolve('jquery'), - use: [ - { - loader: 'expose-loader', - options: 'jQuery', - }, - { - loader: 'expose-loader', - options: '$', - }, - ], + loader: 'expose-loader', + options: { + exposes: ['jQuery', '$'], + }, }, { test: require.resolve('./app/lib/moment-timezone'), - use: [ - { - loader: 'expose-loader', - options: 'moment', - }, - ], + loader: 'expose-loader', + options: { + exposes: 'moment', + }, }, ], }, @@ -130,7 +132,7 @@ if (development) { headers: { 'Access-Control-Allow-Origin': '*' }, }; config.output.publicPath = `//localhost:${devServerPort}/webpack/`; - config.devtool = 'cheap-module-eval-source-map'; + config.devtool = 'eval-cheap-module-source-map'; } else { console.log(`\nWebpack ${env} build for Rails...`); // eslint-disable-line no-console } diff --git a/client/yarn.lock b/client/yarn.lock index 02e1074593b..a7df8cbe366 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -2,11 +2,19 @@ # yarn lockfile v1 -"@babel/cli@^7.4.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.15.4.tgz#00e21e192b738dec7900c8bb36270e377217c0a4" - integrity sha512-9RhhQ7tgKRcSO/jI3rNLxalLSk30cHqeM8bb+nGOJTyYBDpkoXw/A9QHZ2SYjlslAt4tr90pZQGIEobwWHSIDw== +"@ampproject/remapping@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" + integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + +"@babel/cli@^7.16.0": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.17.6.tgz#169e5935f1795f0b62ded5a2accafeedfe5c5363" + integrity sha512-l4w608nsDNlxZhiJ5tE3DbNmr61fIKMZ6fTBo171VEFuFMIYuJ3mHRhTLEkKKyvx2Mizkkv/0a8OJOnZqkKYNA== dependencies: + "@jridgewell/trace-mapping" "^0.3.4" commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" @@ -15,7 +23,7 @@ slash "^2.0.0" source-map "^0.5.0" optionalDependencies: - "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.2" + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" "@babel/code-frame@7.12.11": @@ -25,97 +33,98 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== - -"@babel/core@^7.1.0", "@babel/core@^7.4.5": - version "7.15.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9" - integrity sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helpers" "^7.15.4" - "@babel/parser" "^7.15.5" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" + integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.16.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@^7.9.0": + version "7.17.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" + integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.17.2" + "@babel/parser" "^7.17.3" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" semver "^6.3.0" - source-map "^0.5.0" -"@babel/generator@^7.15.4", "@babel/generator@^7.4.0": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" - integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== +"@babel/generator@^7.17.3", "@babel/generator@^7.7.2": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" + integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" - integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz#21ad815f609b84ee0e3058676c33cf6d1670525f" - integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" - integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" - integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-member-expression-to-functions" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -126,307 +135,322 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz#f9aec9d219f271eaf92b9f561598ca6b2682600c" - integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" - integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/helper-get-function-arity" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-get-function-arity@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" - integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" - integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" - integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" - integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c" - integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw== - dependencies: - "@babel/helper-module-imports" "^7.15.4" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-simple-access" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/helper-validator-identifier" "^7.14.9" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-optimise-call-expression@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" - integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" - integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-wrap-function" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" - integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-simple-access@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" - integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" - integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-split-export-declaration@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" - integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" - integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== - dependencies: - "@babel/helper-function-name" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helpers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" - integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== - dependencies: - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" + integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.17.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" + integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/node@^7.4.5": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.15.4.tgz#aa22f08e5d95354467a09e2bcd51d3565204dd02" - integrity sha512-UZue+j8p5aKTaVjvy5psYmqLHqmz+9cIboAFoa97S1xeZyUr0gT6KzXB8ZkfBIsP/u79biOdjGHVXBXnW3rVfw== +"@babel/node@^7.16.5": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.16.8.tgz#57ba1dfa63dbcc72d477f05597ce07f1c4f8b558" + integrity sha512-V2dopEtPUL4LD+e8UtMIZB6BbsmMsS/7E1ZAvWNINzBfi7Cf3X9MLCpzHVZT4HeeF1lQl72IRtqqVt2RUImwyA== dependencies: - "@babel/register" "^7.15.3" + "@babel/register" "^7.16.8" commander "^4.0.1" - core-js "^3.16.0" + core-js "^3.20.2" node-environment-flags "^1.0.5" regenerator-runtime "^0.13.4" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.15.4", "@babel/parser@^7.15.5", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549" - integrity sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.7.0": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" + integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" - integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz#f82aabe96c135d2ceaa917feb9f5fca31635277e" - integrity sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.15.4" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== +"@babel/plugin-proposal-class-properties@^7.16.5", "@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-class-static-block@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" - integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" + integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.17.6" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.15.6": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" - integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/compat-data" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.15.4" + "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-property-in-object@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" - integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-create-class-features-plugin" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -435,7 +459,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -449,7 +480,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -463,6 +494,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -470,14 +508,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" - integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== +"@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -491,14 +529,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -526,295 +564,304 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5": +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== +"@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoping@^7.15.3": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" - integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" - integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc" + integrity sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" - integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" - integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== dependencies: - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" - integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== dependencies: - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" - integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" - integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-display-name@^7.14.5": - version "7.15.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz#6aaac6099f1fcf6589d35ae6be1b6e10c8c602b9" - integrity sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q== +"@babel/plugin-transform-react-display-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af" - integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ== +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== dependencies: - "@babel/plugin-transform-react-jsx" "^7.14.5" + "@babel/plugin-transform-react-jsx" "^7.16.7" -"@babel/plugin-transform-react-jsx@^7.14.5": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz#3314b2163033abac5200a869c4de242cd50a914c" - integrity sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw== +"@babel/plugin-transform-react-jsx@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" + integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-jsx" "^7.14.5" - "@babel/types" "^7.14.9" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.17.0" -"@babel/plugin-transform-react-pure-annotations@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc" - integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g== +"@babel/plugin-transform-react-pure-annotations@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" + integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/polyfill@^7.4.4": +"@babel/polyfill@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g== @@ -822,31 +869,32 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.4.5": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.6.tgz#0f3898db9d63d320f21b17380d8462779de57659" - integrity sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw== - dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" - "@babel/plugin-proposal-async-generator-functions" "^7.15.4" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.15.4" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.15.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.15.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" +"@babel/preset-env@^7.16.5": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -861,50 +909,50 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.15.3" - "@babel/plugin-transform-classes" "^7.15.4" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.15.4" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.15.4" - "@babel/plugin-transform-modules-systemjs" "^7.15.4" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.15.4" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.15.6" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.16.0" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" semver "^6.3.0" -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -912,96 +960,104 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.0.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" - integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ== +"@babel/preset-react@^7.16.5": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" + integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-react-display-name" "^7.14.5" - "@babel/plugin-transform-react-jsx" "^7.14.5" - "@babel/plugin-transform-react-jsx-development" "^7.14.5" - "@babel/plugin-transform-react-pure-annotations" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" -"@babel/register@^7.15.3": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.15.3.tgz#6b40a549e06ec06c885b2ec42c3dd711f55fe752" - integrity sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw== +"@babel/register@^7.16.8": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.17.0.tgz#8051e0b7cb71385be4909324f072599723a1f084" + integrity sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.0" + pirates "^4.0.5" source-map-support "^0.5.16" "@babel/runtime-corejs3@^7.10.2": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz#403139af262b9a6e8f9ba04a6fdcebf8de692bf1" - integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg== + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.5.tgz#9057d879720c136193f0440bc400088212a74894" + integrity sha512-F1pMwvTiUNSAM8mc45kccMQxj31x3y3P+tA/X8hKNWp3/hUsxdGxZ3D3H8JIkxtfA8qGkaBTKvcmvStaYseAFw== dependencies: - core-js-pure "^3.16.0" + core-js-pure "^3.19.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.15.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" - integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" + integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.15.4", "@babel/template@^7.4.0": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" - integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" - integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" +"@babel/template@^7.16.7", "@babel/template@^7.3.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" - integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.5": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@date-io/core@^1.3.13": +"@date-io/core@1.x", "@date-io/core@^1.3.13": version "1.3.13" resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA== -"@date-io/moment@^1.3.6": +"@date-io/moment@^1.3.13": version "1.3.13" resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-1.3.13.tgz#56c2772bc4f6675fc6970257e6033e7a7c2960f0" integrity sha512-3kJYusJtQuOIxq6byZlzAHoW/18iExJer9qfRF5DyyzdAk074seTuJfdofjz4RFfTd/Idk8WylOQpWtERqvFuQ== dependencies: "@date-io/core" "^1.3.13" +"@discoveryjs/json-ext@^0.5.0": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" + integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1017,6 +1073,37 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@formatjs/ecma402-abstract@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz#ac6c17a8fffac43c6d68c849a7b732626d32654c" + integrity sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ== + dependencies: + tslib "^2.0.1" + +"@formatjs/ecma402-abstract@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.5.0.tgz#759c8f11ff45e96f8fb58741e7fbdb41096d5ddd" + integrity sha512-wXv36yo+mfWllweN0Fq7sUs7PUiNopn7I0JpLTe3hGu6ZMR4CV7LqK1llhB18pndwpKoafQKb1et2DCJAOW20Q== + dependencies: + tslib "^2.0.1" + +"@formatjs/intl-numberformat@^5.5.2": + version "5.7.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-5.7.6.tgz#630206bb0acefd2d508ccf4f82367c6875cad611" + integrity sha512-ZlZfYtvbVHYZY5OG3RXizoCwxKxEKOrzEe2YOw9wbzoxF3PmFn0SAgojCFGLyNXkkR6xVxlylhbuOPf1dkIVNg== + dependencies: + "@formatjs/ecma402-abstract" "1.4.0" + tslib "^2.0.1" + +"@formatjs/ts-transformer@^2.6.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-2.13.0.tgz#df47b35cdd209269d282a411f1646e0498aa8fdc" + integrity sha512-mu7sHXZk1NWZrQ3eUqugpSYo8x5/tXkrI4uIbFqCEC0eNgQaIcoKgVeDFgDAcgG+cEme2atAUYSFF+DFWC4org== + dependencies: + intl-messageformat-parser "6.1.2" + tslib "^2.0.1" + typescript "^4.0" + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -1027,236 +1114,385 @@ minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@icons/material@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== -"@jest/console@^24.7.1", "@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" + 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" -"@jest/core@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" - integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== - dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.9.0" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-resolve-dependencies "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - jest-watcher "^24.9.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - realpath-native "^1.1.0" - rimraf "^2.5.4" - slash "^2.0.0" - strip-ansi "^5.0.0" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" -"@jest/environment@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" - integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== - dependencies: - "@jest/fake-timers" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - -"@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== - dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - -"@jest/reporters@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" - integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== - dependencies: - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + 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.2.6" - jest-haste-map "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - node-notifier "^5.4.2" - slash "^2.0.0" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + 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 "^8.1.0" -"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: callsites "^3.0.0" - graceful-fs "^4.1.15" + graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" - integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== dependencies: - "@jest/test-result" "^24.9.0" - jest-haste-map "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + 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.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" - pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" source-map "^0.6.1" - write-file-atomic "2.4.1" + write-file-atomic "^3.0.0" -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== -"@material-ui/core@^3.8.3": - version "3.9.4" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-3.9.4.tgz#5297fd4ad9e739a87da4a6d34fc4af5396886e13" - integrity sha512-r8QFLSexcYZbnqy/Hn4v8xzmAJV41yaodUVjmbGLi1iGDLG3+W941hEtEiBmxTRRqv2BdK3r4ijILcqKmDv/Sw== +"@jridgewell/trace-mapping@^0.3.0", "@jridgewell/trace-mapping@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== dependencies: - "@babel/runtime" "^7.2.0" - "@material-ui/system" "^3.0.0-alpha.0" - "@material-ui/utils" "^3.0.0-alpha.2" - "@types/jss" "^9.5.6" - "@types/react-transition-group" "^2.0.8" - brcast "^3.0.1" - classnames "^2.2.5" + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz#32abc8a5c624bc4e46c43d84dfb8b26d33a96f58" + integrity sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg== + dependencies: + detect-libc "^1.0.3" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.5" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@material-ui/core@^4.12.3": + version "4.12.3" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.3.tgz#80d665caf0f1f034e52355c5450c0e38b099d3ca" + integrity sha512-sdpgI/PL56QVsEJldwEe4FFaFTLUqN+rd7sSZiRCdx2E/C7z5yK0y/khAWVBH24tXwto7I1hCzNWfJGZIYJKnw== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/styles" "^4.11.4" + "@material-ui/system" "^4.12.1" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.2" + "@types/react-transition-group" "^4.2.0" + clsx "^1.0.4" + hoist-non-react-statics "^3.3.2" + popper.js "1.16.1-lts" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" + react-transition-group "^4.4.0" + +"@material-ui/pickers@^3.3.10": + version "3.3.10" + resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.3.10.tgz#f1b0f963348cc191645ef0bdeff7a67c6aa25485" + integrity sha512-hS4pxwn1ZGXVkmgD4tpFpaumUaAg2ZzbTrxltfC5yPw4BJV+mGkfnQOB4VpWEYZw2jv65Z0wLwDE/piQiPPZ3w== + dependencies: + "@babel/runtime" "^7.6.0" + "@date-io/core" "1.x" + "@types/styled-jsx" "^2.2.8" + clsx "^1.0.2" + react-transition-group "^4.0.0" + rifm "^0.7.0" + +"@material-ui/styles@^4.11.4": + version "4.11.4" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d" + integrity sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew== + dependencies: + "@babel/runtime" "^7.4.4" + "@emotion/hash" "^0.8.0" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.2" + clsx "^1.0.4" csstype "^2.5.2" - debounce "^1.1.0" - deepmerge "^3.0.0" - dom-helpers "^3.2.1" - hoist-non-react-statics "^3.2.1" - is-plain-object "^2.0.4" - jss "^9.8.7" - jss-camel-case "^6.0.0" - jss-default-unit "^8.0.2" - jss-global "^3.0.0" - jss-nested "^6.0.1" - jss-props-sort "^6.0.0" - jss-vendor-prefixer "^7.0.0" - normalize-scroll-left "^0.1.2" - popper.js "^1.14.1" - prop-types "^15.6.0" - react-event-listener "^0.6.2" - react-transition-group "^2.2.1" - recompose "0.28.0 - 0.30.0" - warning "^4.0.1" + hoist-non-react-statics "^3.3.2" + jss "^10.5.1" + jss-plugin-camel-case "^10.5.1" + jss-plugin-default-unit "^10.5.1" + jss-plugin-global "^10.5.1" + jss-plugin-nested "^10.5.1" + jss-plugin-props-sort "^10.5.1" + jss-plugin-rule-value-function "^10.5.1" + jss-plugin-vendor-prefixer "^10.5.1" + prop-types "^15.7.2" -"@material-ui/system@^3.0.0-alpha.0": - version "3.0.0-alpha.2" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-3.0.0-alpha.2.tgz#096e80c8bb0f70aea435b9e38ea7749ee77b4e46" - integrity sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA== +"@material-ui/system@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.1.tgz#2dd96c243f8c0a331b2bb6d46efd7771a399707c" + integrity sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw== dependencies: - "@babel/runtime" "^7.2.0" - deepmerge "^3.0.0" - prop-types "^15.6.0" - warning "^4.0.1" + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.11.2" + csstype "^2.5.2" + prop-types "^15.7.2" -"@material-ui/utils@^3.0.0-alpha.2": - version "3.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz#836c62ea46f5ffc6f0b5ea05ab814704a86908b1" - integrity sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng== +"@material-ui/types@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" + integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== + +"@material-ui/utils@^4.11.2": + version "4.11.2" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a" + integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA== dependencies: - "@babel/runtime" "^7.2.0" - prop-types "^15.6.0" - react-is "^16.6.3" + "@babel/runtime" "^7.4.4" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" -"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.2": - version "2.1.8-no-fsevents.2" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz#e324c0a247a5567192dd7180647709d7e2faf94b" - integrity sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg== +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": + version "2.1.8-no-fsevents.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" + integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^5.1.2" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@types/babel__core@^7.1.0", "@types/babel__core@^7.1.2": - version "7.1.16" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" - integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@popperjs/core@^2.8.6": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" + integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== + +"@react-dnd/asap@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-4.0.0.tgz#b300eeed83e9801f51bd66b0337c9a6f04548651" + integrity sha512-0XhqJSc6pPoNnf8DhdsPHtUhRzZALVzYMTzRwV4VI6DJNJ/5xxfL9OQUwb8IH5/2x7lSf7nAZrnzUD+16VyOVQ== + +"@react-dnd/invariant@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-dnd/invariant/-/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e" + integrity sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw== + +"@react-dnd/shallowequal@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a" + integrity sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg== + +"@restart/hooks@^0.3.26": + version "0.3.27" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.27.tgz#91f356d66d4699a8cd8b3d008402708b6a9dc505" + integrity sha512-s984xV/EapUIfkjlf8wz9weP2O9TNKR96C68FfMEy2bE69+H4cNv3RD4Mf97lW7Htt7PjZrYTjSC8f3SB9VCXw== + dependencies: + dequal "^2.0.2" + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1265,9 +1501,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" @@ -1279,32 +1515,115 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": version "7.14.2" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== dependencies: "@babel/types" "^7.3.0" -"@types/cheerio@^0.22.22": - version "0.22.30" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.30.tgz#6c1ded70d20d890337f0f5144be2c5e9ce0936e6" - integrity sha512-t7ZVArWZlq3dFa9Yt33qFBQIK4CQd1Q3UJp0V+UhP6vgLWLM6Qug7vZuRSGXg45zXeB1Fm5X2vmBkEX58LV2Tw== +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/cheerio@^0.22.22": + version "0.22.30" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.30.tgz#6c1ded70d20d890337f0f5144be2c5e9ce0936e6" + integrity sha512-t7ZVArWZlq3dFa9Yt33qFBQIK4CQd1Q3UJp0V+UhP6vgLWLM6Qug7vZuRSGXg45zXeB1Fm5X2vmBkEX58LV2Tw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" + integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.28" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" + integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/fs-extra@^9.0.1": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" -"@types/glob@^7.1.1": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== +"@types/http-proxy@^1.17.8": + version "1.17.8" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55" + integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA== dependencies: - "@types/minimatch" "*" "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" @@ -1313,15 +1632,14 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: - "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/json-schema@^7.0.5": +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -1331,218 +1649,349 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/jss@^9.5.6": - version "9.5.8" - resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.8.tgz#258391f42211c042fc965508d505cbdc579baa5b" - integrity sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA== - dependencies: - csstype "^2.0.0" - indefinite-observable "^1.0.1" +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== -"@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "16.9.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" - integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== + version "17.0.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" + integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/prettier@^2.1.5": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" + integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== "@types/prop-types@*": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== -"@types/react-text-mask@^5.4.3": - version "5.4.9" - resolved "https://registry.yarnpkg.com/@types/react-text-mask/-/react-text-mask-5.4.9.tgz#0f0942ebbb776ed2f45733d3352ba07bcd33e549" - integrity sha512-y7XGGo4EkT1yoEocDF+YSIukP4iq8XwXJr9+gbzi18yHK6ALW95JOIM8XwF3oAzquNDrtcmEvyqXJETFhXdUHw== - dependencies: - "@types/react" "*" +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-transition-group@^2.0.8": - version "2.9.2" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.9.2.tgz#c48cf2a11977c8b4ff539a1c91d259eaa627028d" - integrity sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA== +"@types/react-transition-group@^4.2.0": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" + integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== dependencies: "@types/react" "*" -"@types/react@*": - version "17.0.21" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.21.tgz#069c43177cd419afaab5ce26bb4e9056549f7ea6" - integrity sha512-GzzXCpOthOjXvrAUFQwU/svyxu658cwu00Q9ugujS4qc1zXgLFaO0kS2SLOaMWLt2Jik781yuHCWB7UcYdGAeQ== +"@types/react@*", "@types/react@>=16.9.11": + version "17.0.39" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" + integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" +"@types/retry@^0.12.0": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" + integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/schema-utils@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/schema-utils/-/schema-utils-2.4.0.tgz#9983012045d541dcee053e685a27c9c87c840fcd" + integrity sha512-454hrj5gz/FXcUE20ygfEiN4DxZ1sprUo0V1gqIqkNZ/CzoEzAZEll2uxMsuyz6BYjiQan4Aa65xbTemfzW9hQ== + dependencies: + schema-utils "*" + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/styled-jsx@^2.2.8": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/styled-jsx/-/styled-jsx-2.2.9.tgz#e50b3f868c055bcbf9bc353eca6c10fdad32a53f" + integrity sha512-W/iTlIkGEyTBGTEvZCey8EgQlQ5l0DwMqi3iOXlLs2kyBwYTXHKEiU6IZ5EwoRwngL8/dGYuzezSup89ttVHLw== + dependencies: + "@types/react" "*" + +"@types/warning@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" + integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= + +"@types/ws@^8.2.2": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.2.3.tgz#0bca6b03ba2f41e0fab782d4a573fe284aa907ae" + integrity sha512-ahRJZquUYCdOZf/rCsWg88S0/+cb9wazUBHv6HZEe3XdYaBe2zr/slM8J28X07Hn88Pnm4ezo7N8/ofnOgrPVQ== + dependencies: + "@types/node" "*" "@types/yargs-parser@*": version "20.2.1" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== -"@types/yargs@^13.0.0": - version "13.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" - integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ== +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== dependencies: "@types/yargs-parser" "*" -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@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@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@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@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.12.1.tgz#008cb39964d0860b00104a4e9853cfe3bb32ef20" + integrity sha512-4bEa8WrS5DdzJq43smPH12ys4AOoCxVu2xjYGXQR4DnNyM8pqNzCr28zodf38Jc4bxWdniSEKKC1bQaccXGq5Q== + dependencies: + "@typescript-eslint/utils" "5.12.1" + +"@typescript-eslint/scope-manager@5.12.1": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz#58734fd45d2d1dec49641aacc075fba5f0968817" + integrity sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ== + dependencies: + "@typescript-eslint/types" "5.12.1" + "@typescript-eslint/visitor-keys" "5.12.1" + +"@typescript-eslint/types@5.12.1": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.12.1.tgz#46a36a28ff4d946821b58fe5a73c81dc2e12aa89" + integrity sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA== + +"@typescript-eslint/typescript-estree@5.12.1": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz#6a9425b9c305bcbc38e2d1d9a24c08e15e02b722" + integrity sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw== + dependencies: + "@typescript-eslint/types" "5.12.1" + "@typescript-eslint/visitor-keys" "5.12.1" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.12.1": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.12.1.tgz#447c24a05d9c33f9c6c64cb48f251f2371eef920" + integrity sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.12.1" + "@typescript-eslint/types" "5.12.1" + "@typescript-eslint/typescript-estree" "5.12.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.12.1": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz#f722da106c8f9695ae5640574225e45af3e52ec3" + integrity sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A== + dependencies: + "@typescript-eslint/types" "5.12.1" + eslint-visitor-keys "^3.0.0" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@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@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@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@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@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@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@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@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@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" +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== +"@webpack-cli/configtest@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" + integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== + +"@webpack-cli/info@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" + integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" + integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== + +"@wojtekmaj/enzyme-adapter-react-17@^0.6.6": + version "0.6.6" + resolved "https://registry.yarnpkg.com/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.6.tgz#2ee3d4956caea4de05e372e5d9f39b31becffe6a" + integrity sha512-gSfhg8CiL0Vwc2UgUblGVZIy7M0KyXaZsd8+QwzV8TSVRLkGyzdLtYEcs9wRWyQTsdmOd+oRGqbVgUX7AVJxug== + dependencies: + "@wojtekmaj/enzyme-adapter-utils" "^0.1.2" + enzyme-shallow-equal "^1.0.0" + has "^1.0.0" + prop-types "^15.7.0" + react-is "^17.0.0" + react-test-renderer "^17.0.0" + +"@wojtekmaj/enzyme-adapter-utils@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.2.tgz#82b81801e234b8f1febde91b243aaa8c5ba4aaa9" + integrity sha512-MM/DqDqvxNVlWLqSVQiUbRN9MuDLJfefmPbJ8ZKdmdf5ID8G+i42XhFpoQh5bAZUCdwzRae3+WSZl2lXcFOrhw== + dependencies: + function.prototype.name "^1.1.0" + has "^1.0.0" + object.fromentries "^2.0.0" + prop-types "^15.7.0" "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1554,12 +2003,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= - -abab@^2.0.0: +abab@^2.0.0, abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -1569,27 +2013,20 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" ace-builds@^1.4.13: - version "1.4.13" - resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.13.tgz#186f42d3849ebcc6a48b93088a058489897514c1" - integrity sha512-SOLzdaQkY6ecPKYRDDg+MY1WoGgXA34cIvYJNNoBMGGUswHmlauU2Hy0UL96vW0Fs/LgFbMUjD+6vqzWTldIYQ== - -acorn-globals@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" - integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8= - dependencies: - acorn "^4.0.4" + version "1.4.14" + resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.14.tgz#2c41ccbccdd09e665d3489f161a20baeb3a3c852" + integrity sha512-NBOQlm9+7RBqRqZwimpgquaLeTJFayqb9UEPtTkpC3TkkwDnlsT/TwsCC0svjt9kEZ6G9mH5AEOHSz6Q/HrzQQ== -acorn-globals@^4.1.0: +acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== @@ -1597,6 +2034,19 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1607,59 +2057,61 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn@^4.0.4: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= - -acorn@^5.5.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.0.1, acorn@^6.4.1: +acorn@^6.0.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.4.0: +acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -add-dom-event-listener@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" - integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - object-assign "4.x" + debug "4" -airbnb-prop-types@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" - integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: - 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.2" - prop-types "^15.7.2" - prop-types-exact "^1.2.0" - react-is "^16.13.1" + clean-stack "^2.0.0" + indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1669,10 +2121,10 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.6.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764" - integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.8.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.10.0.tgz#e573f719bd3af069017e3b66538ab968d040e54d" + integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1684,46 +2136,43 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: +ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1743,15 +2192,12 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -1759,11 +2205,24 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + are-we-there-yet@~1.1.2: version "1.1.7" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" @@ -1787,31 +2246,11 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - array-find@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" @@ -1827,91 +2266,65 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== +array-includes@^3.1.3, array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.1" get-intrinsic "^1.1.1" - is-string "^1.0.5" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + is-string "^1.0.7" -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.0.tgz#24d63e38983cdc6bf023a3c574b2f2a3f384c301" - integrity sha512-TfO1gz+tLm+Bswq0FBOXPqAchtCr2Rn48T8dLJoRFl8NoEosjZmzptmuo1X8aZBzZcqsR1W8U761tjACJtngTQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.1.tgz#20688792acdb97a09488eaaee9eebbf3966aae21" + integrity sha512-Dk3Ty7N42Odk7PjU/Ci3zT4pLj20YvuVnneG/58ICM6bt4Ij5kZaJTVQ9TSaWaIECX2sFyz4KItkVZqHNnciqw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0" + es-abstract "^1.19.0" es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.5" + is-string "^1.0.7" -array.prototype.find@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c" - integrity sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA== +array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.4" + es-abstract "^1.19.0" -array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== +array.prototype.flatmap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" + integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== dependencies: call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.19.0" -array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@^2.0.6, asap@~2.0.3: +asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -1920,49 +2333,21 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1975,10 +2360,10 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== attr-accept@^1.1.3: version "1.1.3" @@ -1987,11 +2372,6 @@ attr-accept@^1.1.3: dependencies: core-js "^2.5.0" -autobind-decorator@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-2.4.0.tgz#ea9e1c98708cf3b5b356f7cf9f10f265ff18239c" - integrity sha512-OGYhWUO72V6DafbF8PM8rm3EPbfuyMZcJhtm5/n26IDwO18pohE4eNazLoCGhPiXOCD0gEGmrbU3849QvM8bbw== - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2002,12 +2382,12 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axe-core@^4.0.2: - version "4.3.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz#b55cd8e8ddf659fe89b064680e1c6a4dceab0325" - integrity sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA== +axe-core@^4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.5.tgz#78d6911ba317a8262bfee292aeafcc1e04b49cc5" + integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA== -axios-mock-adapter@^1.16.0: +axios-mock-adapter@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.20.0.tgz#21f5b4b625306f43e8c05673616719da86e20dcb" integrity sha512-shZRhTjLP0WWdcvHKf3rH3iW9deb3UdKbdnKUoHmmsnBhVXN3sjPJM6ZvQ2r/ywgvBVQrMnjrSyQab60G1sr2w== @@ -2016,7 +2396,7 @@ axios-mock-adapter@^1.16.0: is-blob "^2.1.0" is-buffer "^2.0.5" -axios@^0.21.2: +axios@^0.21.4: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== @@ -2028,21 +2408,12 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-eslint@^10.0.1: +babel-eslint@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== @@ -2054,23 +2425,24 @@ babel-eslint@^10.0.1: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^24.8.0, babel-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" - integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== - dependencies: - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.9.0" - chalk "^2.4.2" - slash "^2.0.0" +babel-jest@^27.4.5, babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" -babel-loader@^8.0.6: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +babel-loader@^8.2.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" + integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== dependencies: find-cache-dir "^3.3.1" loader-utils "^1.4.0" @@ -2084,67 +2456,94 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - -babel-plugin-jest-hoist@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" - integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== - dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" - integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.3.1" -babel-plugin-react-intl@^3.1.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-3.5.1.tgz#57d22cae27238b4020403b13de9e763267937648" - integrity sha512-1jlEJCSmLaJM4tjIKpu64UZ833COCHmwR77bFJDOye+zlwf80uR1b8p41l4tClx1QsrfI+qV6w/5AiPYQgaMUQ== +babel-plugin-react-intl@^7.9.4: + version "7.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-7.9.4.tgz#1fc9ab50470d41b934df50d8f436578ee1732cb0" + integrity sha512-cMKrHEXrw43yT4M89Wbgq8A8N8lffSquj1Piwov/HVukR7jwOw8gf9btXNsQhT27ccyqEwy+M286JQYy0jby2g== dependencies: - "@babel/core" "^7.4.5" - "@babel/helper-plugin-utils" "^7.0.0" - "@types/babel__core" "^7.1.2" - fs-extra "^8.0.1" - intl-messageformat-parser "^1.8.1" + "@babel/core" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/types" "^7.9.5" + "@formatjs/ts-transformer" "^2.6.0" + "@types/babel__core" "^7.1.7" + "@types/fs-extra" "^9.0.1" + "@types/schema-utils" "^2.4.0" + fs-extra "^9.0.0" + intl-messageformat-parser "^5.3.7" + schema-utils "^2.6.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@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@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" - integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.9.0" + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" -babel-runtime@6.x, babel-runtime@^6.23.0, babel-runtime@^6.26.0: +babel-runtime@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -2157,24 +2556,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -2192,60 +2573,26 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@1.19.2: + version "1.19.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" + integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== dependencies: - bytes "3.1.0" + bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "1.7.2" + http-errors "1.8.1" iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" + qs "6.9.7" + raw-body "2.4.3" + type-is "~1.6.18" bonjour@^3.5.0: version "3.5.0" @@ -2273,126 +2620,32 @@ brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brcast@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.2.tgz#55c41a7a077ff4e7ac784c2060e544d4c39ad477" - integrity sha512-f5XwwFCCuvgqP2nMH/hJ74FqnGmb4X3D+NC//HphxJzzhsZvSZa+Hk/syB7j3ZHpPDLMoYU8oBgviRWfNvEfKA== - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - 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: + balanced-match "^1.0.0" + concat-map "0.0.1" -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - pako "~1.0.5" + fill-range "^7.0.1" -browserslist@^4.16.6, browserslist@^4.17.0: - version "4.17.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.0.tgz#1fcd81ec75b41d6d4994fb0831b92ac18c01649c" - integrity sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1: + version "4.19.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" + integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== dependencies: - caniuse-lite "^1.0.30001254" - colorette "^1.3.0" - electron-to-chromium "^1.3.830" + caniuse-lite "^1.0.30001312" + electron-to-chromium "^1.4.71" escalade "^3.1.1" - node-releases "^1.1.75" + node-releases "^2.0.2" + picocolors "^1.0.0" bser@2.1.1: version "2.1.1" @@ -2411,70 +2664,15 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -2489,42 +2687,38 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001254: - version "1.0.30001257" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz#150aaf649a48bee531104cfeda57f92ce587f6e5" - integrity sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA== +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -canvas@^1.6.13: - version "1.6.13" - resolved "https://registry.yarnpkg.com/canvas/-/canvas-1.6.13.tgz#8cb4e9abbea9e615a377890ffac50277a1167c73" - integrity sha512-XAfzfEOHZ3JIPjEV+WSI6PpISgUta3dgmndWbsajotz+0TQOX/jDpp2kawjRERatOGv9sMMzk5auB3GKEKA6hg== - dependencies: - nan "^2.10.0" +caniuse-lite@^1.0.30001312: + version "1.0.30001312" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" + integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== +canvas@^2.6.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.8.0.tgz#f99ca7f25e6e26686661ffa4fec1239bbef74461" + integrity sha512-gLTi17X8WY9Cf5GZ2Yns8T5lfBOcGgFehDFb+JQwDqdOoBOcECS9ZWMEAqMSVcMYwXD659J8NyzjRY/2aE+C2Q== dependencies: - rsvp "^4.8.4" + "@mapbox/node-pre-gyp" "^1.0.0" + nan "^2.14.0" + simple-get "^3.0.3" caseless@~0.12.0: version "0.12.0" @@ -2536,7 +2730,7 @@ chain-function@^1.0.0: resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== -chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -2547,7 +2741,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2569,28 +2763,15 @@ change-emitter@^0.1.2: resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= -chart.js@^2.8.0: - version "2.9.4" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.4.tgz#0827f9563faffb2dc5c06562f8eb10337d5b9684" - integrity sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A== - dependencies: - chartjs-color "^2.1.0" - moment "^2.10.2" - -chartjs-color-string@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz#1df096621c0e70720a64f4135ea171d051402f71" - integrity sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A== - dependencies: - color-name "^1.0.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chartjs-color@^2.1.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.4.1.tgz#6118bba202fe1ea79dd7f7c0f9da93467296c3b0" - integrity sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w== - dependencies: - chartjs-color-string "^0.6.0" - color-convert "^1.9.3" +chart.js@^3.7.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.7.1.tgz#0516f690c6a8680c6c707e31a4c1807a6f400ada" + integrity sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA== cheerio-select@^1.5.0: version "1.5.0" @@ -2616,29 +2797,10 @@ cheerio@^1.0.0-rc.3: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.0, chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== +chokidar@^3.4.0, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -2650,44 +2812,36 @@ chokidar@^3.4.0, chokidar@^3.4.1: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -classnames@^2.2.5, classnames@^2.2.6: +classnames@2.x, classnames@^2.2.1, classnames@^2.2.5, classnames@^2.2.6: version "2.3.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2697,6 +2851,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -2706,7 +2869,7 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clsx@^1.0.2: +clsx@^1.0.2, clsx@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== @@ -2721,20 +2884,17 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codemirror@^5.26.0: - version "5.62.3" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.62.3.tgz#5cfdee6931c8b2d1b39ae773aaaaec2cc6b5558e" - integrity sha512-zZAyOfN8TU67ngqrxhOgtkSAGV9jSpN1snbl8elPtnh9Z5A11daR405+dhLzLnuXrwX0WCShWlybxPN3QC/9Pg== +codemirror@^5.65.2: + version "5.65.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.2.tgz#5799a70cb3d706e10f60e267245e3a75205d3dd9" + integrity sha512-SZM4Zq7XEC8Fhroqe3LxbEEX1zUPWH1wMr5zxiBuiUF64iYOUH/JI88v4tBag8MiBS8B8gRv8O1pPXGYXQ4ErA== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -2753,17 +2913,22 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -combined-stream@^1.0.6, combined-stream@~1.0.6: +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -2780,28 +2945,16 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-classes@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" - integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE= - dependencies: - component-indexof "0.0.3" - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -component-indexof@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" - integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ= - compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -2827,59 +2980,34 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - confusing-browser-globals@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" - integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" - -content-type-parser@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - integrity sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ== + safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0: +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== @@ -2891,40 +3019,23 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +cookie@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.14.0, core-js-compat@^3.16.0: - version "3.17.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.17.3.tgz#b39c8e4dec71ecdc735c653ce5233466e561324e" - integrity sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA== +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== dependencies: - browserslist "^4.17.0" + browserslist "^4.19.1" semver "7.0.0" -core-js-pure@^3.16.0: - version "3.17.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.17.3.tgz#98ea3587188ab7ef4695db6518eeb71aec42604a" - integrity sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ== +core-js-pure@^3.19.0: + version "3.20.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.20.0.tgz#7253feccf8bb05b72c153ddccdbe391ddbffbe03" + integrity sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg== core-js@^1.0.0: version "1.2.7" @@ -2936,10 +3047,10 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.16.0: - version "3.17.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.17.3.tgz#8e8bd20e91df9951e903cabe91f9af4a0895bc1e" - integrity sha512-lyvajs+wd8N1hXfzob1LdOCCHFU4bGMbqqmLn1Q4QlCpDqWPpGf+p0nj+LNrvDDG33j0hZXw2nsvvVpHysxyNw== +core-js@^3.20.2: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94" + integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig== core-util-is@1.0.2: version "1.0.2" @@ -2951,57 +3062,7 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3010,31 +3071,6 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-animation@^1.3.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/css-animation/-/css-animation-1.6.1.tgz#162064a3b0d51f958b7ff37b3d6d4de18e17039e" - integrity sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog== - dependencies: - babel-runtime "6.x" - component-classes "^1.2.5" - css-in-js-utils@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" @@ -3043,102 +3079,77 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-loader@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" - integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash "^4.17.11" - postcss "^6.0.23" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" +css-loader@^6.5.1: + version "6.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.6.0.tgz#c792ad5510bd1712618b49381bd0310574fafbd3" + integrity sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.5" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.5" css-select@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" - integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + version "4.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.0.tgz#ab28276d3afb00cc05e818bd33eb030f14f57895" + integrity sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw== dependencies: boolbase "^1.0.0" - css-what "^5.0.0" - domhandler "^4.2.0" - domutils "^2.6.0" - nth-check "^2.0.0" - -css-selector-tokenizer@^0.7.0: - version "0.7.3" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" - integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" -css-vendor@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" - integrity sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo= +css-vendor@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" + integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== dependencies: + "@babel/runtime" "^7.8.3" is-in-browser "^1.0.2" -css-what@^5.0.0, css-what@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" - integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== +css-what@^5.0.1, css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": +cssom@^0.4.1, cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ= - dependencies: - cssom "0.3.x" - -cssstyle@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== +cssstyle@^2.0.0, cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: - cssom "0.3.x" + cssom "~0.3.6" -csstype@^2.0.0, csstype@^2.5.2: - version "2.6.18" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.18.tgz#980a8b53085f34af313410af064f2bd241784218" - integrity sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ== +csstype@^2.5.2: + version "2.6.19" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa" + integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ== csstype@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b" - integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + version "3.0.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" + integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== -damerau-levenshtein@^1.0.6: +damerau-levenshtein@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== @@ -3150,7 +3161,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0: +data-urls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== @@ -3159,41 +3170,65 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -debounce@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2.6.9, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debug@^3.1.1, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: - ms "2.1.2" + decamelize "^1.1.0" + map-obj "^1.0.0" -decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-diff@^0.3.5: version "0.3.8" @@ -3217,23 +3252,22 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" - integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== - -deepmerge@^4.0.0: +deepmerge@^4.0.0, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" + execa "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3: version "1.1.3" @@ -3242,40 +3276,19 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" delayed-stream@~1.0.0: version "1.0.0" @@ -3292,33 +3305,30 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" +dequal@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4: version "2.1.0" @@ -3330,43 +3340,31 @@ diff-match-patch@^1.0.5: resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== -diff-sequences@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" - integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" + path-type "^4.0.0" discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= -dnd-core@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-4.0.5.tgz#3b83d138d0d5e265c73ec978dec5e1ed441dc665" - integrity sha1-O4PRONDV4mXHPsl43sXh7UQdxmU= - dependencies: - asap "^2.0.6" - invariant "^2.2.4" - lodash "^4.17.10" - redux "^4.0.0" - -dnd-core@^7.7.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-7.7.0.tgz#3166aefc8c5b85ca4ade4ae836712a3108975fab" - integrity sha512-+YqwflWEY1MEAEl2QiEiRaglYkCwIZryyQwximQGuTOm/ns7fS6Lg/i7OCkrtjM10D5FhArf/VUHIL4ZaRBK0g== +dnd-core@14.0.1, dnd-core@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-14.0.1.tgz#76d000e41c494983210fb20a48b835f81a203c2e" + integrity sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A== dependencies: - asap "^2.0.6" - invariant "^2.2.4" - redux "^4.0.1" + "@react-dnd/asap" "^4.0.0" + "@react-dnd/invariant" "^2.0.0" + redux "^4.1.1" dns-equal@^1.0.0: version "1.0.0" @@ -3407,13 +3405,21 @@ dom-align@^1.7.0: resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.2.tgz#0f8164ebd0c9c21b0c790310493cd855892acd4b" integrity sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg== -dom-helpers@^3.2.0, dom-helpers@^3.2.1, dom-helpers@^3.4.0: +dom-helpers@^3.2.0: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== dependencies: "@babel/runtime" "^7.1.2" +dom-helpers@^5.0.1, dom-helpers@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + dom-serializer@^1.0.1, dom-serializer@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" @@ -3423,11 +3429,6 @@ dom-serializer@^1.0.1, dom-serializer@^1.3.2: domhandler "^4.2.0" entities "^2.0.0" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" @@ -3440,14 +3441,21 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" - integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: domelementtype "^2.2.0" -domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: +domutils@^2.5.2, domutils@^2.7.0, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== @@ -3456,16 +3464,6 @@ domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: domelementtype "^2.2.0" domhandler "^4.2.0" -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3479,23 +3477,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.830: - version "1.3.839" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.839.tgz#27a5b21468e9fefb0e328a029403617f20acec9c" - integrity sha512-0O7uPs9LJNjQ/U5mW78qW8gXv9H6Ba3DHZ5/yt8aBsvomOWDkV3MddT7enUYvLQEUVOURjWmgJJWVZ3K98tIwQ== +electron-to-chromium@^1.4.71: + version "1.4.71" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6" + integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw== -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== emoji-regex@^7.0.1: version "7.0.3" @@ -3507,7 +3497,7 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.0.0: +emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== @@ -3529,13 +3519,6 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - enhanced-resolve@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" @@ -3545,14 +3528,13 @@ enhanced-resolve@^0.9.1: memory-fs "^0.2.0" tapable "^0.1.8" -enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== +enhanced-resolve@^5.8.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz#49ac24953ac8452ed8fed2ef1340fc8e043667ee" + integrity sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA== dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" + graceful-fs "^4.2.4" + tapable "^2.2.0" enquirer@^2.3.5: version "2.3.6" @@ -3566,35 +3548,17 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -enzyme-adapter-react-16@^1.13.2: - version "1.15.6" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz#fd677a658d62661ac5afd7f7f541f141f8085901" - integrity sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g== - dependencies: - enzyme-adapter-utils "^1.14.0" - enzyme-shallow-equal "^1.0.4" - has "^1.0.3" - object.assign "^4.1.2" - object.values "^1.1.2" - prop-types "^15.7.2" - react-is "^16.13.1" - react-test-renderer "^16.0.0-0" - semver "^5.7.0" +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -enzyme-adapter-utils@^1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz#afbb0485e8033aa50c744efb5f5711e64fbf1ad0" - integrity sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg== - dependencies: - airbnb-prop-types "^2.16.0" - function.prototype.name "^1.1.3" - has "^1.0.3" - object.assign "^4.1.2" - object.fromentries "^2.0.3" - prop-types "^15.7.2" - semver "^5.7.1" +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== -enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.4: +enzyme-shallow-equal@^1.0.0, enzyme-shallow-equal@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz#b9256cb25a5f430f9bfe073a84808c1d74fced2e" integrity sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q== @@ -3602,7 +3566,7 @@ enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^1.0.4: has "^1.0.3" object-is "^1.1.2" -enzyme-to-json@^3.3.5: +enzyme-to-json@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz#94f85c413bcae8ab67be53b0a94b69a560e27823" integrity sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg== @@ -3611,7 +3575,7 @@ enzyme-to-json@^3.3.5: lodash "^4.17.21" react-is "^16.12.0" -enzyme@^3.9.0: +enzyme@^3.11.0: version "3.11.0" resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== @@ -3639,24 +3603,17 @@ enzyme@^3.9.0: rst-selector-parser "^2.2.3" string.prototype.trim "^1.2.1" -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.4, es-abstract@^1.18.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" - integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -3669,7 +3626,9 @@ es-abstract@^1.17.4, es-abstract@^1.18.0, es-abstract@^1.18.0-next.1, es-abstrac is-callable "^1.2.4" is-negative-zero "^2.0.1" is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" is-string "^1.0.7" + is-weakref "^1.0.1" object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" @@ -3682,6 +3641,11 @@ es-array-method-boxes-properly@^1.0.0: resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3721,7 +3685,7 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^1.6.1, escodegen@^1.9.1: +escodegen@^1.11.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -3733,6 +3697,18 @@ escodegen@^1.6.1, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-config-airbnb-base@^14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" @@ -3752,9 +3728,14 @@ eslint-config-airbnb@^18.2.1: object.entries "^1.1.2" eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz#8e6d17c7436649e98c4c2189868562921ef563de" + integrity sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw== + +eslint-import-resolver-alias@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" + integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== eslint-import-resolver-node@^0.3.6: version "0.3.6" @@ -3764,10 +3745,10 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" -eslint-import-resolver-webpack@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.1.tgz#6d2fb928091daf2da46efa1e568055555b2de902" - integrity sha512-O/8mG6AHmaKYSMb4lWxiXPpaARxOJ4rMQEHJ8vTgjS1MXooJA3KPgBPPAdOPoV17v5ML5120qod5FBLM+DtgEw== +eslint-import-resolver-webpack@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz#fc813df0d08b9265cc7072d22393bda5198bdc1e" + integrity sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg== dependencies: array-find "^1.0.0" debug "^3.2.7" @@ -3775,86 +3756,85 @@ eslint-import-resolver-webpack@^0.13.1: find-root "^1.1.0" has "^1.0.3" interpret "^1.4.0" - is-core-module "^2.4.0" - is-regex "^1.1.3" + is-core-module "^2.7.0" + is-regex "^1.1.4" lodash "^4.17.21" resolve "^1.20.0" semver "^5.7.1" -eslint-module-utils@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534" - integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q== +eslint-module-utils@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== dependencies: debug "^3.2.7" - pkg-dir "^2.0.0" + find-up "^2.1.0" -eslint-plugin-import@^2.24.2: - version "2.24.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz#2c8cd2e341f3885918ee27d18479910ade7bb4da" - integrity sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q== +eslint-plugin-import@^2.25.3: + version "2.25.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" + integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== dependencies: - array-includes "^3.1.3" - array.prototype.flat "^1.2.4" + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" debug "^2.6.9" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.6.2" - find-up "^2.0.0" + eslint-module-utils "^2.7.2" has "^1.0.3" - is-core-module "^2.6.0" + is-core-module "^2.8.0" + is-glob "^4.0.3" minimatch "^3.0.4" - object.values "^1.1.4" - pkg-up "^2.0.0" - read-pkg-up "^3.0.0" + object.values "^1.1.5" resolve "^1.20.0" - tsconfig-paths "^3.11.0" + tsconfig-paths "^3.12.0" -eslint-plugin-jsx-a11y@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" - integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== +eslint-plugin-jest@^25.3.2: + version "25.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== dependencies: - "@babel/runtime" "^7.11.2" + "@typescript-eslint/experimental-utils" "^5.0.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" + integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== + dependencies: + "@babel/runtime" "^7.16.3" aria-query "^4.2.2" - array-includes "^3.1.1" + array-includes "^3.1.4" ast-types-flow "^0.0.7" - axe-core "^4.0.2" + axe-core "^4.3.5" axobject-query "^2.2.0" - damerau-levenshtein "^1.0.6" - emoji-regex "^9.0.0" + damerau-levenshtein "^1.0.7" + emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.1.0" + jsx-ast-utils "^3.2.1" language-tags "^1.0.5" + minimatch "^3.0.4" -eslint-plugin-react@^7.25.1: - version "7.25.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz#9286b7cd9bf917d40309760f403e53016eda8331" - integrity sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug== +eslint-plugin-react@^7.28.0: + version "7.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf" + integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw== dependencies: - array-includes "^3.1.3" - array.prototype.flatmap "^1.2.4" + array-includes "^3.1.4" + array.prototype.flatmap "^1.2.5" doctrine "^2.1.0" - estraverse "^5.2.0" - has "^1.0.3" + estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.0.4" - object.entries "^1.1.4" - object.fromentries "^2.0.4" - object.values "^1.1.4" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.0" + object.values "^1.1.5" prop-types "^15.7.2" resolve "^2.0.0-next.3" - string.prototype.matchall "^4.0.5" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" + semver "^6.3.0" + string.prototype.matchall "^4.0.6" -eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -3869,6 +3849,13 @@ eslint-utils@^2.1.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" @@ -3879,6 +3866,11 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-visitor-keys@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint@^7.32.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -3946,7 +3938,7 @@ esquery@^1.4.0: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0, esrecurse@^4.3.0: +esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -3958,10 +3950,10 @@ estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -3978,97 +3970,57 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0: +events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -expect@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" - integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== dependencies: - "@jest/types" "^24.9.0" - ansi-styles "^3.2.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.9.0" + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" -expose-loader@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.5.tgz#e29ea2d9aeeed3254a3faa1b35f502db9f9c3f6f" - integrity sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw== +expose-loader@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-3.1.0.tgz#7a0bdecb345b921ca238a8c4715a4ea7e227213f" + integrity sha512-2RExSo0yJiqP+xiUue13jQa2IHE8kLDzTI7b6kn+vUlBVvlzNSiLDzo4e5Pp5J039usvTUnxZ8sUOhv0Kg15NA== express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + version "4.17.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" + integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== dependencies: - accepts "~1.3.7" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.19.2" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.4.2" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" @@ -4082,76 +4034,57 @@ express@^4.17.1: on-finished "~2.3.0" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.9.7" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" + safe-buffer "5.2.1" + send "0.17.2" + serve-static "1.14.2" + setprototypeof "1.2.0" statuses "~1.5.0" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fabric@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/fabric/-/fabric-2.5.0.tgz#1793d4d1906cadc2278ffff0292afc060e6816e8" - integrity sha512-RmdAY7quFNlTD/7Y7OjGrJrP0KtdjZWLgRcs2Js1pHNidYeuKai7YxlUe/pAmyAE6+YVimHQ7viy5tyBpxZhmg== +fabric@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/fabric/-/fabric-4.6.0.tgz#bd11c2baf165db2c97e4d05740d931586cb26bbb" + integrity sha512-MhJXCD/ZugOGV5aPHIG0MY1q2EfrlzC2sasrAHj0HHXN50JTe1bHFrlRdkXBijCJ0dG81fGu/A/Pct9DyuwCzQ== optionalDependencies: - canvas "^1.6.13" - jsdom "^9.12.0" - xmldom "0.1.x" + canvas "^2.6.1" + jsdom "^15.2.1" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4162,10 +4095,17 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" faye-websocket@^0.11.3: version "0.11.4" @@ -4182,9 +4122,9 @@ fb-watchman@^2.0.0: bser "2.1.1" fbjs@^0.8.1: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + version "0.8.18" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.18.tgz#9835e0addb9aca2eff53295cd79ca1cfc7c9662a" + integrity sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA== dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -4192,12 +4132,7 @@ fbjs@^0.8.1: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + ua-parser-js "^0.7.30" file-entry-cache@^6.0.1: version "6.0.1" @@ -4206,21 +4141,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -4241,7 +4161,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: +find-cache-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -4264,15 +4184,7 @@ find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -4286,7 +4198,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -4294,16 +4206,6 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -4313,17 +4215,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" - integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== flux-standard-action@^2.0.3: version "2.1.2" @@ -4334,27 +4228,24 @@ flux-standard-action@^2.0.3: lodash.isstring "^4.0.1" follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" - integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + version "1.14.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" + integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -4369,100 +4260,61 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" + minipass "^3.0.0" -fs-extra@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" +fs-monkey@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.2, function.prototype.name@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.4.tgz#e4ea839b9d3672ae99d0efd9f38d9191c5eaac83" - integrity sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ== +function.prototype.name@^1.1.0, function.prototype.name@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.0" functions-have-names "^1.2.2" functional-red-black-tree@^1.0.1: @@ -4475,6 +4327,21 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA== +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -4501,7 +4368,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -4515,17 +4382,20 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" @@ -4535,11 +4405,6 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -4547,14 +4412,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -4562,7 +4419,24 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.1.1: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -4574,64 +4448,29 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" - integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== dependencies: type-fest "^0.20.2" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= +globby@^11.0.1, globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" globule@^1.0.0: version "1.3.3" @@ -4642,15 +4481,10 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== handle-thing@^2.0.0: version "2.0.1" @@ -4670,6 +4504,11 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + hard-source-webpack-plugin@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz#a99071e25b232f1438a5bc3c99f10a3869e4428e" @@ -4723,67 +4562,19 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -history@^4.7.2, history@^4.9.0: +history@^4.7.2: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== @@ -4795,21 +4586,19 @@ history@^4.7.2, history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= +history@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" + "@babel/runtime" "^7.7.6" hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0, hoist-non-react-statics@^2.5.4: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0: +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -4828,6 +4617,13 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + dependencies: + lru-cache "^6.0.0" + hotkeys-js@^3.8.1: version "3.8.7" resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.8.7.tgz#c16cab978b53d7242f860ca3932e976b92399981" @@ -4851,17 +4647,24 @@ html-element-map@^1.2.0: array.prototype.filter "^1.0.0" call-bind "^1.0.2" -html-encoding-sniffer@^1.0.1, html-encoding-sniffer@^1.0.2: +html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" + integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== html-escaper@^2.0.0: version "2.0.2" @@ -4883,16 +4686,16 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" + inherits "2.0.4" + setprototypeof "1.2.0" statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + toidentifier "1.0.1" http-errors@~1.6.2: version "1.6.3" @@ -4904,33 +4707,32 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + version "0.5.5" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5" + integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA== -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz#5df04f69a89f530c2284cd71eeaa51ba52243289" + integrity sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" -http-proxy@^1.17.0: +http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -4948,12 +4750,20 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -hyphenate-style-name@^1.0.2: +hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== @@ -4972,34 +4782,22 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -immutable@^3.8.1: +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immutable@^3.8.2: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= @@ -5012,42 +4810,23 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -in-publish@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" - integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== - -indefinite-observable@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-1.0.2.tgz#0a328793ab2385d4b9dca23eaab4afe6936a73f8" - integrity sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA== - dependencies: - symbol-observable "1.2.0" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" @@ -5057,26 +4836,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - inline-style-prefixer@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" @@ -5085,14 +4854,6 @@ inline-style-prefixer@^3.0.8: bowser "^1.7.3" css-in-js-utils "^2.0.0" -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -5107,6 +4868,11 @@ interpret@^1.4.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + intl-format-cache@^2.0.5: version "2.2.9" resolved "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-2.2.9.tgz#fb560de20c549cda20b569cf1ffb6dc62b5b93b4" @@ -5117,10 +4883,20 @@ intl-messageformat-parser@1.4.0: resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" integrity sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU= -intl-messageformat-parser@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz#0eb14c5618333be4c95c409457b66c8c33ddcc01" - integrity sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg== +intl-messageformat-parser@6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.1.2.tgz#28c65f3689f538e66c7cf628881548d6a82ff3c2" + integrity sha512-4GQDEPhl/ZMNDKwMsLqyw1LG2IAWjmLJXdmnRcHKeLQzpgtNYZI6lVw1279pqIkRk2MfKb9aDsVFzm565azK5A== + dependencies: + "@formatjs/ecma402-abstract" "1.5.0" + tslib "^2.0.1" + +intl-messageformat-parser@^5.3.7: + version "5.5.1" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-5.5.1.tgz#f09a692755813e6220081e3374df3fb1698bd0c6" + integrity sha512-TvB3LqF2VtP6yI6HXlRT5TxX98HKha6hCcrg9dwlPwNaedVNuQA9KgBdtWKgiyakyCTYHQ+KJeFEstNKfZr64w== + dependencies: + "@formatjs/intl-numberformat" "^5.5.2" intl-messageformat@^2.0.0, intl-messageformat@^2.1.0: version "2.2.0" @@ -5141,7 +4917,7 @@ intl@^1.2.5: resolved "https://registry.yarnpkg.com/intl/-/intl-1.2.5.tgz#82244a2190c4e419f8371f5aa34daa3420e2abde" integrity sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94= -invariant@^2.1.0, invariant@^2.1.1, invariant@^2.2.4: +invariant@^2.1.1, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -5153,34 +4929,20 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0, ip@^1.1.5: +ip@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: +ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== is-arguments@^1.0.4: version "1.1.1" @@ -5202,13 +4964,6 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5229,49 +4984,23 @@ is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.4: +is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0, is-core-module@^2.4.0, is-core-module@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" - integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== +is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.7.0, is-core-module@^2.8.0, is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -5279,46 +5008,16 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -5341,17 +5040,10 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -5361,9 +5053,9 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.6" @@ -5372,55 +5064,49 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^2.0.0: +is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-promise@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.3, is-regex@^1.1.4: +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -5428,11 +5114,21 @@ is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.3, is-regex@^1. call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-stream@^1.0.1, is-stream@^1.1.0: +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + +is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -5452,32 +5148,31 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.1, is-windows@^1.0.2: +is-weakref@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -5487,14 +5182,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= @@ -5512,419 +5200,469 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@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" +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - 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" -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: 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" -istanbul-reports@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== +istanbul-reports@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== dependencies: html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" -jest-cli@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" - integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== dependencies: - "@jest/core" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" exit "^0.1.2" - import-local "^2.0.0" - is-ci "^2.0.0" - jest-config "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^13.3.0" + yargs "^16.2.0" -jest-config@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" - integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.9.0" - "@jest/types" "^24.9.0" - babel-jest "^24.9.0" - chalk "^2.0.1" + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" glob "^7.1.1" - jest-environment-jsdom "^24.9.0" - jest-environment-node "^24.9.0" - jest-get-type "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - micromatch "^3.1.10" - pretty-format "^24.9.0" - realpath-native "^1.1.0" - -jest-diff@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" - integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-docblock@^24.3.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" - integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== - dependencies: - detect-newline "^2.1.0" - -jest-each@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" - integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== - dependencies: - "@jest/types" "^24.9.0" - chalk "^2.0.1" - jest-get-type "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - -jest-environment-jsdom@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" - integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - jsdom "^11.5.1" - -jest-environment-node@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" - integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== - -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== - dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" - -jest-jasmine2@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" - integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^24.9.0" - is-generator-fn "^2.0.0" - jest-each "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - throat "^4.0.0" - -jest-leak-detector@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" - integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== - dependencies: - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-localstorage-mock@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jest-localstorage-mock/-/jest-localstorage-mock-2.4.0.tgz#c6073810735dd3af74020ea6c3885ec1cc6d0d13" - integrity sha512-/mC1JxnMeuIlAaQBsDMilskC/x/BicsQ/BXQxEOw+5b1aGZkkOAqAF3nu8yq449CpzGtp5jJ5wCmDNxLgA2m6A== + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-matcher-utils@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" - integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: - chalk "^2.0.1" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" + detect-newline "^3.0.0" -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.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" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" -jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-localstorage-mock@^2.4.18: + version "2.4.19" + resolved "https://registry.yarnpkg.com/jest-localstorage-mock/-/jest-localstorage-mock-2.4.19.tgz#0c21c04913787a48bf49e8099612029a3eebe3a0" + integrity sha512-TW7Cw6dbg4mgpxVUKmHU/sjOaUrUU2kp1DiWAY7JaPGDN1cRC/yXx1ewcJyPZ4d4qAd0UtJOER50sDjJSwVYGQ== + +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: - "@jest/types" "^24.9.0" + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" -jest-pnp-resolver@^1.2.1: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== - -jest-resolve-dependencies@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" - integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== - dependencies: - "@jest/types" "^24.9.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.9.0" - -jest-resolve@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" - integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== - dependencies: - "@jest/types" "^24.9.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" - integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.4.2" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-leak-detector "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" - integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - chalk "^2.0.1" - exit "^0.1.2" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^13.3.0" - -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" -jest-snapshot@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" - integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - expect "^24.9.0" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - mkdirp "^0.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" natural-compare "^1.4.0" - pretty-format "^24.9.0" - semver "^6.2.0" - -jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== - dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" + pretty-format "^27.5.1" + semver "^7.3.2" -jest-validate@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" leven "^3.1.0" - pretty-format "^24.9.0" - -jest-watcher@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" - integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== - dependencies: - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.9.0" - string-length "^2.0.0" - -jest-worker@^24.6.0, jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + pretty-format "^27.5.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-worker@^27.4.5, jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: + "@types/node" "*" merge-stream "^2.0.0" - supports-color "^6.1.0" + supports-color "^8.0.0" -jest@^24.8.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" - integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== +jest@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - import-local "^2.0.0" - jest-cli "^24.9.0" + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" -jquery-ui@^1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" - integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= +jquery-ui@^1.13.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.13.1.tgz#d0b7a42e73a04c31bb5706adf86f6f8942f64eaa" + integrity sha512-2VlU59N5P4HaumDK1Z3XEVjSvegFbEOQRgpHUBaB2Ak98Axl3hFhJ6RFcNQNuk9SfL6WxIbuLst8dW/U56NSiA== + dependencies: + jquery ">=1.8.0 <4.0.0" -jquery@3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" - integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== +"jquery@>=1.8.0 <4.0.0", jquery@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== js-base64@^2.1.8: version "2.6.4" @@ -5936,11 +5674,6 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -5954,62 +5687,70 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== +jsdom@^15.2.1: + version "15.2.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" + integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== dependencies: abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" + acorn "^7.1.0" + acorn-globals "^4.3.2" array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" + cssom "^0.4.1" + cssstyle "^2.0.0" + data-urls "^1.1.0" domexception "^1.0.1" - escodegen "^1.9.1" + escodegen "^1.11.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" + nwsapi "^2.2.0" + parse5 "5.1.0" pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" + request "^2.88.0" + request-promise-native "^1.0.7" + saxes "^3.1.9" symbol-tree "^3.2.2" - tough-cookie "^2.3.4" + tough-cookie "^3.0.1" w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^7.0.0" xml-name-validator "^3.0.0" -jsdom@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" - integrity sha1-6MVG//ywbADUgzyoRBD+1/igl9Q= - dependencies: - abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" - whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" - xml-name-validator "^2.0.1" +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + 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.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" jsesc@^2.5.1: version "2.5.2" @@ -6021,7 +5762,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-loader@^0.5.4: +json-loader@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== @@ -6031,6 +5772,11 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6041,10 +5787,10 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" @@ -6056,11 +5802,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6075,106 +5816,109 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" -jss-camel-case@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44" - integrity sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ== +jss-plugin-camel-case@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7" + integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== dependencies: - hyphenate-style-name "^1.0.2" - -jss-default-unit@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6" - integrity sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg== - -jss-global@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2" - integrity sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q== + "@babel/runtime" "^7.3.1" + hyphenate-style-name "^1.0.3" + jss "10.9.0" -jss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca" - integrity sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA== +jss-plugin-default-unit@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991" + integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== dependencies: - warning "^3.0.0" - -jss-props-sort@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323" - integrity sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g== + "@babel/runtime" "^7.3.1" + jss "10.9.0" -jss-vendor-prefixer@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71" - integrity sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA== +jss-plugin-global@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f" + integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== dependencies: - css-vendor "^0.3.8" + "@babel/runtime" "^7.3.1" + jss "10.9.0" -jss@^9.8.7: - version "9.8.7" - resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05" - integrity sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ== +jss-plugin-nested@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3" + integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== dependencies: - is-in-browser "^1.1.3" - symbol-observable "^1.1.0" - warning "^3.0.0" + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" - integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== +jss-plugin-props-sort@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d" + integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== dependencies: - array-includes "^3.1.2" - object.assign "^4.1.2" + "@babel/runtime" "^7.3.1" + jss "10.9.0" -keycode@^2.1.8: - version "2.2.0" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" - integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ= +jss-plugin-rule-value-function@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67" + integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== +jss-plugin-vendor-prefixer@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a" + integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== + dependencies: + "@babel/runtime" "^7.3.1" + css-vendor "^2.0.8" + jss "10.9.0" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= +jss@10.9.0, jss@^10.5.1: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b" + integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== dependencies: - is-buffer "^1.1.5" + "@babel/runtime" "^7.3.1" + csstype "^3.0.2" + is-in-browser "^1.1.3" + tiny-warning "^1.0.2" -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" + integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== dependencies: - is-buffer "^1.1.5" + array-includes "^3.1.3" + object.assign "^4.1.2" -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== +keycode@^2.1.8: + version "2.2.1" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff" + integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -6184,6 +5928,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +klona@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -6196,11 +5945,6 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -6222,38 +5966,22 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== load-script@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -6290,11 +6018,6 @@ lodash-es@^4.17.15: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -6350,16 +6073,11 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6367,29 +6085,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -6412,36 +6107,29 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + tmpl "1.0.5" -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== material-colors@^1.2.1: version "1.2.6" @@ -6455,18 +6143,6 @@ material-ui-chip-input@^0.19.0: dependencies: prop-types "^15.5.7" -material-ui-pickers@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/material-ui-pickers/-/material-ui-pickers-2.2.4.tgz#8b33cfc55cbc5b2d520db45abf4b3dc94090dd3c" - integrity sha512-QCQh08Ylmnt+o4laW+rPs92QRAcESv3sPXl50YadLm++rAZAXAOh3K8lreGdynCMYFgZfdyu81Oz9xzTlAZNfw== - dependencies: - "@types/react-text-mask" "^5.4.3" - clsx "^1.0.2" - react-event-listener "^0.6.6" - react-text-mask "^5.4.3" - react-transition-group "^2.5.3" - tslib "^1.9.3" - material-ui@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.20.2.tgz#5fc9b4b62b691d3b16c89d8e54597a0412b52c7d" @@ -6484,56 +6160,45 @@ material-ui@^0.20.2: simple-assign "^0.1.0" warning "^3.0.0" -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +memfs@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" + integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== + dependencies: + fs-monkey "1.0.3" + +memoize-one@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + memory-fs@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA= -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + 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" merge-descriptors@1.0.1: version "1.0.1" @@ -6545,126 +6210,134 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" + braces "^3.0.1" + picomatch "^2.2.3" -mime-db@1.49.0, "mime-db@>= 1.43.0 < 2": - version "1.49.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" - integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.32" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" - integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== +"mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.49.0" + mime-db "1.51.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: +minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^3.0.0: + version "3.1.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mirror-creator@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mirror-creator/-/mirror-creator-1.1.0.tgz#170cc74d0ff244449177204716cbbe555d68d69a" integrity sha1-FwzHTQ/yRESRdyBHFsu+VV1o1po= -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - 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 "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -moment-timezone@^0.5.25: - version "0.5.33" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment-timezone@^0.5.34: + version "0.5.34" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" + integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== dependencies: moment ">= 2.9.0" -"moment@>= 2.9.0", moment@^2.10.2, moment@^2.24.0: +"moment@>= 2.9.0", moment@^2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== @@ -6674,34 +6347,17 @@ moo@^0.5.0: resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -6719,27 +6375,15 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -nan@^2.10.0, nan@^2.12.1, nan@^2.13.2: +nan@^2.13.2, nan@^2.14.0: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +nanoid@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== natural-compare@^1.4.0: version "1.4.0" @@ -6756,21 +6400,16 @@ nearley@^2.7.10: railroad-diagrams "^1.0.0" randexp "0.4.6" -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.1: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - node-environment-flags@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" @@ -6787,120 +6426,78 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-fetch@^2.6.5: + version "2.6.6" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.2.1.tgz#82794919071ef2eb5c509293325cec8afd0fd53c" + integrity sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w== -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^5.4.2: - version "5.4.5" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef" - integrity sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - node-object-hash@^1.2.0: version "1.4.2" resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94" integrity sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ== -node-releases@^1.1.75: - version "1.1.75" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" - integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== -node-sass@^4.12.0: - version "4.14.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" - integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== +node-sass@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" + integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" - cross-spawn "^3.0.0" + cross-spawn "^7.0.3" gaze "^1.0.0" get-stdin "^4.0.1" glob "^7.0.3" - in-publish "^2.0.0" lodash "^4.17.15" - meow "^3.7.0" - mkdirp "^0.5.1" + meow "^9.0.0" nan "^2.13.2" - node-gyp "^3.8.0" + node-gyp "^7.1.0" npmlog "^4.0.0" request "^2.88.0" sass-graph "2.2.5" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -6910,31 +6507,29 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: - remove-trailing-separator "^1.0.1" + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-scroll-left@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa" - integrity sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - path-key "^2.0.0" + path-key "^3.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: +npmlog@^4.0.0, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -6944,7 +6539,17 @@ npm-run-path@^2.0.0: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^2.0.0: +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +nth-check@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== @@ -6956,12 +6561,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" - integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ== - -nwsapi@^2.0.7: +nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== @@ -6971,24 +6571,15 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-inspect@^1.11.0, object-inspect@^1.7.0, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2: version "1.1.5" @@ -7003,13 +6594,6 @@ object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -7020,49 +6604,49 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" - integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== +object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" -object.fromentries@^2.0.3, object.fromentries@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== +object.fromentries@^2.0.0, object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + es-abstract "^1.19.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== +object.getownpropertydescriptors@^2.0.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.1" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= +object.hasown@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" + integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== dependencies: - isobject "^3.0.1" + define-properties "^1.1.3" + es-abstract "^1.19.1" -object.values@^1.1.1, object.values@^1.1.2, object.values@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== +object.values@^1.1.1, object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -7081,19 +6665,28 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: - is-wsl "^1.1.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" optionator@^0.8.1: version "0.8.3" @@ -7119,48 +6712,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@0: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -7196,22 +6747,20 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== +p-retry@^4.5.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" + integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== dependencies: - retry "^0.12.0" + "@types/retry" "^0.12.0" + retry "^0.13.1" p-try@^1.0.0: version "1.0.0" @@ -7223,20 +6772,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -7244,24 +6779,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -7270,6 +6787,16 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@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" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -7282,17 +6809,12 @@ parse5-htmlparser2-tree-adapter@^6.0.1: dependencies: parse5 "^6.0.1" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== - -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" - integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ= +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== -parse5@^6.0.1: +parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -7302,28 +6824,6 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -7339,22 +6839,12 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -7371,47 +6861,25 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^3.0.0: version "3.0.0" @@ -7423,31 +6891,10 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.0, pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" +pirates@^4.0.4, pirates@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^3.0.0: version "3.0.0" @@ -7456,31 +6903,24 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -popper.js@^1.14.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== +popper.js@1.16.1-lts: + version "1.16.1-lts" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" + integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== -portfinder@^1.0.26: +portfinder@^1.0.28: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -7489,55 +6929,55 @@ portfinder@^1.0.26: debug "^3.1.1" mkdirp "^0.5.5" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== dependencies: - postcss "^6.0.1" + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" + postcss-selector-parser "^6.0.4" -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" + icss-utils "^5.0.0" -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" + cssesc "^3.0.0" + util-deprecate "^1.0.2" -postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^6.0.1, postcss@^6.0.23: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== +postcss@^8.4.5: + version "8.4.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1" + integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA== dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" + nanoid "^3.2.0" + picocolors "^1.0.0" + source-map-js "^1.0.2" prelude-ls@^1.2.1: version "1.2.1" @@ -7549,41 +6989,30 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.0.tgz#85bdfe0f70c3e777cf13a4ffff39713ca6f64cba" - integrity sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -7592,140 +7021,61 @@ promise@^7.1.1: asap "~2.0.3" prompts@^2.0.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" - integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types-exact@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== - dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" - -prop-types-extra@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" - integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== - dependencies: - react-is "^16.3.2" - warning "^4.0.0" - -prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== +prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.0, prop-types@^15.7.2, prop-types@^15.8.0, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" - -proxy-addr@~2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" + react-is "^16.13.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= +psl@^1.1.28, psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.9.7: + version "6.9.7" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" + integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -raf@^3.4.0, raf@^3.4.1: +raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== @@ -7745,33 +7095,25 @@ randexp@0.4.6: discontinuous-range "1.0.0" ret "~0.1.10" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== +raw-body@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" + integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== dependencies: - bytes "3.1.0" - http-errors "1.7.2" + bytes "3.1.2" + http-errors "1.8.1" iconv-lite "0.4.24" unpipe "1.0.0" @@ -7780,74 +7122,64 @@ raw-loader@~0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= -rc-align@^2.4.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-2.4.5.tgz#c941a586f59d1017f23a428f0b468663fb7102ab" - integrity sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw== +rc-align@^4.0.0: + version "4.0.11" + resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.11.tgz#8198c62db266bc1b8ef05e56c13275bf72628a5e" + integrity sha512-n9mQfIYQbbNTbefyQnRHZPWuTEwG1rY4a9yKlIWHSTbgwI+XUMGRYd0uJ5pE2UbrNX0WvnMBA1zJ3Lrecpra/A== dependencies: - babel-runtime "^6.26.0" + "@babel/runtime" "^7.10.1" + classnames "2.x" dom-align "^1.7.0" - prop-types "^15.5.8" - rc-util "^4.0.4" + lodash "^4.17.21" + rc-util "^5.3.0" + resize-observer-polyfill "^1.5.1" -rc-animate@2.x: - version "2.11.1" - resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.11.1.tgz#2666eeb6f1f2a495a13b2af09e236712278fdb2c" - integrity sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ== +rc-motion@^2.0.0: + version "2.4.4" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.4.4.tgz#e995d5fa24fc93065c24f714857cf2677d655bb0" + integrity sha512-ms7n1+/TZQBS0Ydd2Q5P4+wJTSOrhIrwNxLXCZpR7Fa3/oac7Yi803HDALc2hLAKaCTQtw9LmQeB58zcwOsqlQ== dependencies: - babel-runtime "6.x" - classnames "^2.2.6" - css-animation "^1.3.2" - prop-types "15.x" - raf "^3.4.0" - rc-util "^4.15.3" - react-lifecycles-compat "^3.0.4" + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.2.1" -rc-slider@^8.6.11: - version "8.7.1" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.7.1.tgz#9ed07362dc93489a38e654b21b8122ad70fd3c42" - integrity sha512-WMT5mRFUEcrLWwTxsyS8jYmlaMsTVCZIGENLikHsNv+tE8ThU2lCoPfi/xFNUfJFNFSBFP3MwPez9ZsJmNp13g== +rc-slider@^9.7.5: + version "9.7.5" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.7.5.tgz#193141c68e99b1dc3b746daeb6bf852946f5b7f4" + integrity sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg== dependencies: - babel-runtime "6.x" + "@babel/runtime" "^7.10.1" classnames "^2.2.5" - prop-types "^15.5.4" - rc-tooltip "^3.7.0" - rc-util "^4.0.4" - react-lifecycles-compat "^3.0.4" + rc-tooltip "^5.0.1" + rc-util "^5.16.1" shallowequal "^1.1.0" - warning "^4.0.3" -rc-tooltip@^3.7.0: - version "3.7.3" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-3.7.3.tgz#280aec6afcaa44e8dff0480fbaff9e87fc00aecc" - integrity sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww== +rc-tooltip@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154" + integrity sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA== dependencies: - babel-runtime "6.x" - prop-types "^15.5.8" - rc-trigger "^2.2.2" + "@babel/runtime" "^7.11.2" + rc-trigger "^5.0.0" -rc-trigger@^2.2.2: - version "2.6.5" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-2.6.5.tgz#140a857cf28bd0fa01b9aecb1e26a50a700e9885" - integrity sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw== +rc-trigger@^5.0.0: + version "5.2.10" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.10.tgz#8a0057a940b1b9027eaa33beec8a6ecd85cce2b1" + integrity sha512-FkUf4H9BOFDaIwu42fvRycXMAvkttph9AlbCZXssZDVzz2L+QZ0ERvfB/4nX3ZFPh1Zd+uVGr1DEDeXxq4J1TA== dependencies: - babel-runtime "6.x" + "@babel/runtime" "^7.11.2" classnames "^2.2.6" - prop-types "15.x" - rc-align "^2.4.0" - rc-animate "2.x" - rc-util "^4.4.0" - react-lifecycles-compat "^3.0.4" + rc-align "^4.0.0" + rc-motion "^2.0.0" + rc-util "^5.5.0" -rc-util@^4.0.4, rc-util@^4.15.3, rc-util@^4.4.0: - version "4.21.1" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05" - integrity sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg== +rc-util@^5.16.1, rc-util@^5.2.1, rc-util@^5.3.0, rc-util@^5.5.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.16.1.tgz#374db7cb735512f05165ddc3d6b2c61c21b8b4e3" + integrity sha512-kSCyytvdb3aRxQacS/71ta6c+kBWvM1v8/2h9d/HaNWauc3qB8pLnF20PJ8NajkNN8gb+rR1l0eWO+D4Pz+LLQ== dependencies: - add-dom-event-listener "^1.1.0" - prop-types "^15.5.10" + "@babel/runtime" "^7.12.5" react-is "^16.12.0" - react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" react-ace@^9.5.0: @@ -7861,15 +7193,12 @@ react-ace@^9.5.0: lodash.isequal "^4.5.0" prop-types "^15.7.2" -react-chartjs-2@^2.7.6: - version "2.11.2" - resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-2.11.2.tgz#156c0d2618600561efc23bef278bd48a335cadb6" - integrity sha512-hcPS9vmRJeAALPPf0uo02BiD8BDm0HNmneJYTZVR74UKprXOpql+Jy1rVuj93rKw0Jfx77mkcRfXPxTe5K83uw== - dependencies: - lodash "^4.17.19" - prop-types "^15.7.2" +react-chartjs-2@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-3.3.0.tgz#3f62681645acccc1ab27a9186c70f79d6d417f73" + integrity sha512-4Mt0SR2aiUbWi/4762odRBYSnbNKSs4HWc0o3IW43py5bMfmfpeZU95w6mbvtuLZH/M3GsPJMU8DvDc+5U9blQ== -react-color@^2.17.3: +react-color@^2.19.3: version "2.19.3" resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.19.3.tgz#ec6c6b4568312a3c6a18420ab0472e146aa5683d" integrity sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA== @@ -7882,46 +7211,41 @@ react-color@^2.17.3: reactcss "^1.2.0" tinycolor2 "^1.4.1" -react-dnd-html5-backend@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-5.0.1.tgz#0b578d79c5c01317c70414c8d717f632b919d4f1" - integrity sha1-C1eNecXAExfHBBTI1xf2MrkZ1PE= +react-dnd-html5-backend@^14.0.2: + version "14.1.0" + resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz#b35a3a0c16dd3a2bfb5eb7ec62cf0c2cace8b62f" + integrity sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw== dependencies: - autobind-decorator "^2.1.0" - dnd-core "^4.0.5" - lodash "^4.17.10" - shallowequal "^1.0.2" + dnd-core "14.0.1" -react-dnd-test-backend@^7.4.4: - version "7.7.0" - resolved "https://registry.yarnpkg.com/react-dnd-test-backend/-/react-dnd-test-backend-7.7.0.tgz#c823f4d05b6e4b208eac73ec7e4c1c53fb814290" - integrity sha512-ELX2b6mBcgpVUuS9K74h+ldlHdsb1ZEVhJUm5vv7ZL+9l+xmpz+6IikiSdh7MmEGGrGLb2FCdXReeMPOblaCnQ== +react-dnd-test-backend@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/react-dnd-test-backend/-/react-dnd-test-backend-14.0.1.tgz#687ed2834a3b51df91706a97a42f6d43b55dc054" + integrity sha512-jLGc03K0qd5a0Q+knR8qzUzHqFDEhu3yOxOhJNyWIQucGUbyRhklghJblTJnuvOCNFusnHYOuHERwcvJjXMMbg== dependencies: - dnd-core "^7.7.0" + dnd-core "14.0.1" -react-dnd@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-5.0.0.tgz#c4a17c70109e456dad8906be838e6ee8f32b06b5" - integrity sha1-xKF8cBCeRW2tiQa+g45u6PMrBrU= +react-dnd@^14.0.4: + version "14.0.5" + resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-14.0.5.tgz#ecf264e220ae62e35634d9b941502f3fca0185ed" + integrity sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A== dependencies: - dnd-core "^4.0.5" - hoist-non-react-statics "^2.5.0" - invariant "^2.1.0" - lodash "^4.17.10" - recompose "^0.27.1" - shallowequal "^1.0.2" + "@react-dnd/invariant" "^2.0.0" + "@react-dnd/shallowequal" "^2.0.0" + dnd-core "14.0.1" + fast-deep-equal "^3.1.3" + hoist-non-react-statics "^3.3.2" -react-dom@^16.8.6: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" + scheduler "^0.20.2" -react-dropzone@^5.0.1: +react-dropzone@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-5.1.1.tgz#b05613ea22f1ab71aa1f7cf5367df7b19468a2f3" integrity sha512-C9kXI3D95rVXbLLg9DvzCnmjplKwpfj/2F/MwvGVM05kDwWMzKVKZnmgZHZUebmiVj4mFOmBs2ObLiKvAxunGw== @@ -7929,7 +7253,7 @@ react-dropzone@^5.0.1: attr-accept "^1.1.3" prop-types "^15.6.2" -react-event-listener@^0.6.2, react-event-listener@^0.6.6: +react-event-listener@^0.6.2: version "0.6.6" resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.6.tgz#758f7b991cad9086dd39fd29fad72127e1d8962a" integrity sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw== @@ -7938,7 +7262,12 @@ react-event-listener@^0.6.2, react-event-listener@^0.6.6: prop-types "^15.6.0" warning "^4.0.1" -react-hot-keys@^2.6.2: +react-fast-compare@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-hot-keys@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/react-hot-keys/-/react-hot-keys-2.7.1.tgz#a811445e66551c9f5b0e6b130d12096a59688539" integrity sha512-h2LfJGs450z58/DvKuzal1LetoEGjXUbcxJyKFvWOJPy+IRpQsyxZv7FYDAJ7W0my3ySI3sVB3h5xcgvMdxS1g== @@ -7957,38 +7286,47 @@ react-intl@^2.9.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: +"react-is@^16.12.0 || ^17.0.0", "react-is@^16.8.0 || ^17.0.0", react-is@^17.0.0, react-is@^17.0.1, react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-overlays@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5" - integrity sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA== - dependencies: - classnames "^2.2.5" - dom-helpers "^3.2.1" - prop-types "^15.5.10" - prop-types-extra "^1.0.1" - react-transition-group "^2.2.0" - warning "^3.0.0" +react-overlays@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.1.1.tgz#2e7cf49744b56537c7828ccb94cfc63dd778ae4f" + integrity sha512-eCN2s2/+GVZzpnId4XVWtvDPYYBD2EtOGP74hE+8yDskPzFy9+pV1H3ZZihxuRdEbQzzacySaaDkR7xE0ydl4Q== + dependencies: + "@babel/runtime" "^7.13.8" + "@popperjs/core" "^2.8.6" + "@restart/hooks" "^0.3.26" + "@types/warning" "^3.0.0" + dom-helpers "^5.2.0" + prop-types "^15.7.2" + uncontrollable "^7.2.1" + warning "^4.0.3" -react-player@^1.11.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/react-player/-/react-player-1.15.3.tgz#d00cf145f9c86184cb0a071a1fbf8ecb7b68987f" - integrity sha512-8fc0R1AipFIy7l4lKgnIg+gMU2IY32ZMxxBlINjXAq/YnN3HUP3hOaE+aQ0lQv+a1/MMZgbekWD86ZGDO7kB8g== +react-player@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.9.0.tgz#ef7fe7073434087565f00ff219824e1e02c4b046" + integrity sha512-jNUkTfMmUhwPPAktAdIqiBcVUKsFKrVGH6Ocutj6535CNfM91yrvWxHg6fvIX8Y/fjYUPoejddwh7qboNV9vGA== dependencies: deepmerge "^4.0.0" load-script "^1.0.0" + memoize-one "^5.1.1" prop-types "^15.7.2" + react-fast-compare "^3.0.1" -react-redux@^5.0.7: +react-redux@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q== @@ -8026,45 +7364,47 @@ react-router@^4.3.1: prop-types "^15.6.1" warning "^4.0.1" -react-scroll@^1.7.11: - version "1.8.4" - resolved "https://registry.yarnpkg.com/react-scroll/-/react-scroll-1.8.4.tgz#7cc882d7058d5b5aedcd362b1de13c88d64ebe4c" - integrity sha512-J9rFqmdzularCXJoK2vleHVg2//y9Fs6zh7K13x7Yz3Y1kHPfQ/TTq029L09q1Gr5/5JjFLBOB2Sa3yYIqyTyQ== +react-scroll@^1.8.4: + version "1.8.5" + resolved "https://registry.yarnpkg.com/react-scroll/-/react-scroll-1.8.5.tgz#fea09ccffbbab97c3e3e19acd6a35dccd29b258f" + integrity sha512-VcYFWDV2yGeuqeVCt3vxWTGWT4yCcefXOgvNZ16hSD0QTFzNNWiyZKWAVEgmz22PTKJlwRkspALaFI5+cr73OQ== dependencies: lodash.throttle "^4.1.1" prop-types "^15.7.2" -"react-summernote@github:ekowidianto/react-summernote": - version "2.0.0" - resolved "https://codeload.github.com/ekowidianto/react-summernote/tar.gz/a280f9d5ccc23e7ac604b0fb33e175735b3fa23e" +react-shallow-renderer@^16.13.1: + version "16.14.1" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" + integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== dependencies: - codemirror "^5.26.0" - prop-types "^15.5.10" - summernote "^0.8.15" + object-assign "^4.1.1" + react-is "^16.12.0 || ^17.0.0" -react-test-renderer@^16.0.0-0, react-test-renderer@^16.8.6: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae" - integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg== +"react-summernote@github:zhuhanming/react-summernote#v1.2": + version "2.0.0" + resolved "https://codeload.github.com/zhuhanming/react-summernote/tar.gz/11d35e2f3dc7741dfb174ae011f6206ea90e02ef" dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.8.6" - scheduler "^0.19.1" + codemirror "^5.65.2" + prop-types "^15.8.1" + summernote "^0.8.20" -react-text-mask@^5.4.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/react-text-mask/-/react-text-mask-5.4.3.tgz#991efb4299e30c2e6c2c46d13f617169463e0d2d" - integrity sha1-mR77QpnjDC5sLEbRP2FxaUY+DS0= +react-test-renderer@^17.0.0, react-test-renderer@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" + integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ== dependencies: - prop-types "^15.5.6" + object-assign "^4.1.1" + react-is "^17.0.2" + react-shallow-renderer "^16.13.1" + scheduler "^0.20.2" -react-tooltip@^3.10.0: - version "3.11.6" - resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-3.11.6.tgz#4f9735a2a4aa50580af351ce23e74a56f41afc0c" - integrity sha512-nTc1yHHaPCHHURvMpf/VNF17pIZiU4zwUGFJBUVr1fZkezFC7E0VPMMVrCfDjt+IpwTHICyzlyx+1FiQ7lw5LQ== +react-tooltip@^4.2.21: + version "4.2.21" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.21.tgz#840123ed86cf33d50ddde8ec8813b2960bfded7f" + integrity sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig== dependencies: - prop-types "^15.6.0" + prop-types "^15.7.2" + uuid "^7.0.3" react-transition-group@^1.2.1: version "1.2.1" @@ -8077,24 +7417,23 @@ react-transition-group@^1.2.1: prop-types "^15.5.6" warning "^3.0.0" -react-transition-group@^2.2.0, react-transition-group@^2.2.1, react-transition-group@^2.5.3: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== +react-transition-group@^4.0.0, react-transition-group@^4.4.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== dependencies: - dom-helpers "^3.4.0" + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" -react@^16.8.6: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" reactcss@^1.2.0: version "1.2.3" @@ -8103,49 +7442,26 @@ reactcss@^1.2.0: dependencies: lodash "^4.0.1" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.1, readable-stream@^2.0.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -8167,15 +7483,6 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -8183,24 +7490,12 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== - dependencies: - util.promisify "^1.0.0" - -"recompose@0.28.0 - 0.30.0": - version "0.30.0" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" - integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== dependencies: - "@babel/runtime" "^7.0.0" - change-emitter "^0.1.2" - fbjs "^0.8.1" - hoist-non-react-statics "^2.3.1" - react-lifecycles-compat "^3.0.2" - symbol-observable "^1.0.4" + resolve "^1.9.0" recompose@^0.26.0: version "0.26.0" @@ -8212,27 +7507,15 @@ recompose@^0.26.0: hoist-non-react-statics "^2.3.1" symbol-observable "^1.0.4" -recompose@^0.27.1: - version "0.27.1" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.27.1.tgz#1a49e931f183634516633bbb4f4edbfd3f38a7ba" - integrity sha512-p7xsyi/rfNjHfdP7vPU02uSFa+Q1eHhjKrvO+3+kRP4Ortj+MxEmpmd+UQtBGM2D2iNAjzNI5rCyBKp9Ob5McA== - dependencies: - babel-runtime "^6.26.0" - change-emitter "^0.1.2" - fbjs "^0.8.1" - hoist-non-react-statics "^2.3.1" - react-lifecycles-compat "^3.0.2" - symbol-observable "^1.0.4" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + indent-string "^4.0.0" + strip-indent "^3.0.0" -redux-form@^7.4.2: +redux-form@^7.4.3: version "7.4.3" resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.4.3.tgz#74cd5b460bfbb476987a54841c33e99136800c31" integrity sha512-h2LEGdEQ9XaX2wXZnf6zIUFSETk4jDqG4NUKwqkSfOJZDxT3H2hJmKVZI76j/YsE/8E3eY6yPoAENCxjLi1p+Q== @@ -8258,10 +7541,10 @@ redux-logger@^3.0.6: dependencies: deep-diff "^0.3.5" -redux-persist@^5.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-5.10.0.tgz#5d8d802c5571e55924efc1c3a9b23575283be62b" - integrity sha512-sSJAzNq7zka3qVHKce1hbvqf0Vf5DuTVm7dr4GtsqQVOexnrvbV47RWFiPxQ8fscnyiuWyD2O92DOxPl0tGCRg== +redux-persist@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" + integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== redux-promise@^0.6.0: version "0.6.0" @@ -8271,27 +7554,22 @@ redux-promise@^0.6.0: flux-standard-action "^2.0.3" is-promise "^2.1.0" -redux-thunk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== +redux-thunk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" + integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== -redux@^4.0.0, redux@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.1.tgz#76f1c439bb42043f985fbd9bf21990e60bd67f47" - integrity sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw== +redux@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" + integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== dependencies: "@babel/runtime" "^7.9.2" -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= - -regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== dependencies: regenerate "^1.4.2" @@ -8317,18 +7595,10 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" @@ -8338,52 +7608,30 @@ regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^4.7.1: - version "4.8.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== dependencies: regenerate "^1.4.2" - regenerate-unicode-properties "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" -regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== -regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -8391,7 +7639,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.5: +request-promise-native@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -8400,7 +7648,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.79.0, request@^2.87.0, request@^2.88.0: +request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -8446,58 +7694,51 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -reselect@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" - integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" +reselect@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" + integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== -resolve-from@^3.0.0: +resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.9.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.3: version "2.0.0-next.3" @@ -8512,33 +7753,37 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: +rifm@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.7.0.tgz#debe951a9c83549ca6b33e5919f716044c2230be" + integrity sha512-DSOJTWHD67860I5ojetXdEQRIBvF6YcpNe53j0vn1vp9EUb9N80EiZTxgP+FkDKorWC8PZw052kTF4C1GOivCQ== + dependencies: + "@babel/runtime" "^7.3.1" + +rimraf@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - rst-selector-parser@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" @@ -8547,55 +7792,28 @@ rst-selector-parser@^2.2.3: lodash.flattendeep "^4.4.0" nearley "^2.7.10" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - aproba "^1.1.1" + queue-microtask "^1.2.2" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - sass-graph@2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" @@ -8606,40 +7824,47 @@ sass-graph@2.2.5: scss-tokenizer "^0.2.3" yargs "^13.3.2" -sass-loader@^7.1.0: - version "7.3.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.3.1.tgz#a5bf68a04bcea1c13ff842d747150f7ab7d0d23f" - integrity sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA== +sass-loader@^12.4.0: + version "12.6.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== dependencies: - clone-deep "^4.0.1" - loader-utils "^1.0.1" - neo-async "^2.5.0" - pify "^4.0.1" - semver "^6.3.0" + klona "^2.0.4" + neo-async "^2.6.2" -sax@^1.2.1, sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^3.1.9: + version "3.1.11" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== +schema-utils@*, schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" -schema-utils@^2.6.5: +schema-utils@^2.6.5, schema-utils@^2.6.6: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -8648,7 +7873,16 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -script-loader@^0.7.0: +schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +script-loader@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/script-loader/-/script-loader-0.7.2.tgz#2016db6f86f25f5cf56da38915d83378bb166ba7" integrity sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA== @@ -8668,14 +7902,14 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.8: - version "1.10.11" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" - integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== +selfsigned@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.0.tgz#e927cd5377cbb0a1075302cff8df1042cc2bce5b" + integrity sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ== dependencies: - node-forge "^0.10.0" + node-forge "^1.2.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -8685,27 +7919,22 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== dependencies: debug "2.6.9" depd "~1.1.2" @@ -8714,17 +7943,17 @@ send@0.17.1: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "1.8.1" mime "1.6.0" - ms "2.1.1" + ms "2.1.3" on-finished "~2.3.0" range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" @@ -8741,32 +7970,22 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.17.2" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -8776,18 +7995,10 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" @@ -8796,18 +8007,11 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallowequal@^1.0.2, shallowequal@^1.1.0: +shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -8815,21 +8019,11 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -8839,16 +8033,30 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-assign@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa" integrity sha1-F/0wZqXz13OPUDIbsPFMooHMS6o= +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -8859,6 +8067,11 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -8868,55 +8081,13 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.2.tgz#4bc48c2da9ce4769f19dc723396b50f5c12330a3" - integrity sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.3" - sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" - uuid "^3.4.0" + uuid "^8.3.2" websocket-driver "^0.7.4" sort-keys@^2.0.0: @@ -8926,35 +8097,24 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^2.0.0: +source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.20" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" - integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== +source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -8962,7 +8122,7 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -8972,6 +8132,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -8994,9 +8159,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== spdy-transport@^3.0.0: version "3.0.0" @@ -9021,13 +8186,6 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9048,28 +8206,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== dependencies: escape-string-regexp "^2.0.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -9082,50 +8225,18 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" string-width@^1.0.1: version "1.0.2" @@ -9136,13 +8247,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" @@ -9153,23 +8265,14 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.matchall@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" - integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== +string.prototype.matchall@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" + integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.2" + es-abstract "^1.19.1" get-intrinsic "^1.1.1" has-symbols "^1.0.2" internal-slot "^1.0.3" @@ -9177,13 +8280,13 @@ string.prototype.matchall@^4.0.5: side-channel "^1.0.4" string.prototype.trim@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" - integrity sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q== + version "1.2.5" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz#a587bcc8bfad8cb9829a577f5de30dd170c1682c" + integrity sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.1" string.prototype.trimend@^1.0.4: version "1.0.4" @@ -9201,7 +8304,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -9222,13 +8325,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -9236,51 +8332,53 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= +strip-ansi@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: - is-utf8 "^0.2.0" + ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: - get-stdin "^4.0.1" + min-indent "^1.0.0" strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-loader@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" - integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== - dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" +style-loader@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" + integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== -summernote@^0.8.15: +summernote@^0.8.20: version "0.8.20" resolved "https://registry.yarnpkg.com/summernote/-/summernote-0.8.20.tgz#395905f2cec0aceebc712edc019d91b8ef88f7cf" integrity sha512-W9RhjQjsn+b1s9xiJQgJbCiYGJaDAc9CdEqXo+D13WuStG8lCdtKaO5AiNiSSMJsQJN2EfGSwbBQt+SFE2B8Kw== @@ -9290,138 +8388,147 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -symbol-observable@1.2.0, symbol-observable@^1.0.4, symbol-observable@^1.1.0: +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-observable@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -symbol-tree@^3.2.1, symbol-tree@^3.2.2: +symbol-tree@^3.2.2, symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + version "6.7.5" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.5.tgz#f04478c351ef3d8c7904f0e8be90a1b62417d238" + integrity sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw== dependencies: ajv "^8.0.1" - lodash.clonedeep "^4.5.0" lodash.truncate "^4.4.2" slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" tapable@^0.1.8: version "0.1.10" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q= -tapable@^1.0.0, tapable@^1.0.0-beta.5, tapable@^1.1.3: +tapable@^1.0.0-beta.5: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.0.2, tar@^6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== +terser-webpack-plugin@^5.1.3: + version "5.3.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" + integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" + terser "^5.7.2" -terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== +terser@^5.7.2: + version "5.11.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.11.0.tgz#2da5506c02e12cd8799947f30ce9c5b760be000f" + integrity sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A== dependencies: + acorn "^8.5.0" commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map "~0.7.2" + source-map-support "~0.5.20" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: - glob "^7.1.3" + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - tiny-invariant@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== -tiny-warning@^1.0.0: +tiny-warning@^1.0.0, tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== @@ -9431,36 +8538,16 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== -tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -9468,22 +8555,12 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -9491,6 +8568,24 @@ tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5 psl "^1.1.28" punycode "^2.1.1" +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -9498,15 +8593,22 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== "true-case-path@^1.0.2": version "1.0.3" @@ -9515,30 +8617,32 @@ trim-newlines@^1.0.0: dependencies: glob "^7.1.2" -tsconfig-paths@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" - integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== +tsconfig-paths@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" + integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.9.3: +tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.2.0: +tslib@^2.0.1, tslib@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" @@ -9566,12 +8670,37 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-is@~1.6.17, type-is@~1.6.18: +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -9579,15 +8708,22 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.0: + version "4.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" + integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== -ua-parser-js@^0.7.18: - version "0.7.28" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" - integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== +ua-parser-js@^0.7.30: + version "0.7.31" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" + integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== unbox-primitive@^1.0.1: version "1.0.1" @@ -9599,6 +8735,16 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -9622,53 +8768,21 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0: +universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -9676,77 +8790,45 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse@^1.4.3, url-parse@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" - integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + v8flags@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" @@ -9781,24 +8863,35 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -w3c-hr-time@^1.0.1: +w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - makeerror "1.0.x" + makeerror "1.0.12" warning@^3.0.0: version "3.0.0" @@ -9807,30 +8900,20 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" -warning@^4.0.0, warning@^4.0.1, warning@^4.0.3: +warning@^4.0.1, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== +watchpack@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" + integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -9839,7 +8922,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webfontloader@^1.6.27: +webfontloader@^1.6.28: version "1.6.28" resolved "https://registry.yarnpkg.com/webfontloader/-/webfontloader-1.6.28.tgz#db786129253cb6e8eae54c2fb05f870af6675bae" integrity sha1-23hhKSU8tujq5UwvsF+HCvZnW64= @@ -9849,97 +8932,103 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= -webidl-conversions@^4.0.0, webidl-conversions@^4.0.2: +webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-cli@^3.3.2: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== - dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-dev-server@^3.4.1: - version "3.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== +webpack-cli@^4.9.1: + version "4.9.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" + integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.1.1" + "@webpack-cli/info" "^1.4.1" + "@webpack-cli/serve" "^1.6.1" + colorette "^2.0.14" + commander "^7.0.0" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f" + integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg== dependencies: - ansi-html "0.0.7" + colorette "^2.0.10" + memfs "^3.4.1" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.7.1: + version "4.7.4" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz#d0ef7da78224578384e795ac228d8efb63d5f945" + integrity sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.2.2" + ansi-html-community "^0.0.8" bonjour "^3.5.0" - chokidar "^2.1.8" + chokidar "^3.5.3" + colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" + default-gateway "^6.0.3" + del "^6.0.0" 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.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.0" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + portfinder "^1.0.28" + schema-utils "^4.0.0" + selfsigned "^2.0.0" serve-index "^1.9.1" sockjs "^0.3.21" - sockjs-client "^1.5.0" spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" + strip-ansi "^7.0.0" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== +webpack-manifest-plugin@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f" + integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" + tapable "^2.0.0" + webpack-sources "^2.2.0" -webpack-manifest-plugin@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" - integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== dependencies: - fs-extra "^7.0.0" - lodash ">=3.5 <5" - object.entries "^1.1.0" - tapable "^1.0.0" + clone-deep "^4.0.1" + wildcard "^2.0.0" -webpack-sources@^1.0.1, webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.0.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -9947,34 +9036,48 @@ webpack-sources@^1.0.1, webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.32.2: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@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" +webpack-sources@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.65.0: + version "5.69.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.69.1.tgz#8cfd92c192c6a52c99ab00529b5a0d33aa848dc5" + integrity sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" + enhanced-resolve "^5.8.3" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" 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.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.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.3.1" + webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -9990,7 +9093,7 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== @@ -10002,28 +9105,19 @@ whatwg-fetch@>=0.10.0: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" - integrity sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA= +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -10033,6 +9127,15 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -10049,39 +9152,30 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +wide-align@^1.1.0, wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -10091,20 +9185,20 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^2.0.0: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" @@ -10114,6 +9208,16 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" @@ -10126,54 +9230,35 @@ write-json-file@^2.3.0: sort-keys "^2.0.0" write-file-atomic "^2.0.0" -ws@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" - integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== - dependencies: - async-limiter "~1.0.0" - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" +ws@^7.0.0, ws@^7.4.6: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -xml-name-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" - integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU= +ws@^8.4.2: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmldom@0.1.x: - version "0.1.31" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" - integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xmlchars@^2.1.1, xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: version "4.0.0" @@ -10188,7 +9273,12 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.3.0, yargs@^13.3.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== @@ -10203,3 +9293,16 @@ yargs@^13.3.0, yargs@^13.3.2: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.2" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" diff --git a/config/favicon.json b/config/favicon.json index 9a2cef2ff62..0b699432cde 100644 --- a/config/favicon.json +++ b/config/favicon.json @@ -17,9 +17,7 @@ "declare_only_default_icon": true } }, - "desktop_browser": [ - - ], + "desktop_browser": [], "windows": { "picture_aspect": "no_change", "background_color": "#ffc40d", diff --git a/spec/features/course/achievement_condition_management_spec.rb b/spec/features/course/achievement_condition_management_spec.rb index d7a34570df8..2d02734b4a8 100644 --- a/spec/features/course/achievement_condition_management_spec.rb +++ b/spec/features/course/achievement_condition_management_spec.rb @@ -67,9 +67,8 @@ # Delete achievement condition expect do - find_link( - nil, href: course_achievement_condition_achievement_path(course, achievement, - achievement_condition) + find_button( + course_achievement_condition_achievement_path(course, achievement, achievement_condition) ).click accept_confirm_dialog end.to change { achievement.conditions.count }.by(-1) @@ -115,9 +114,8 @@ # Delete achievement condition expect do - find_link( - nil, href: course_achievement_condition_assessment_path(course, achievement, - assessment_condition) + find_button( + course_achievement_condition_assessment_path(course, achievement, assessment_condition) ).click accept_confirm_dialog end.to change { achievement.conditions.count }.by(-1) @@ -155,8 +153,8 @@ # Delete level condition expect do - find_link( - nil, href: course_achievement_condition_level_path(course, achievement, level_condition) + find_button( + course_achievement_condition_level_path(course, achievement, level_condition) ).click accept_confirm_dialog end.to change { achievement.conditions.count }.by(-1) @@ -201,9 +199,8 @@ # Delete survey condition expect do - find_link( - nil, href: course_achievement_condition_survey_path(course, achievement, - survey_condition) + find_button( + course_achievement_condition_survey_path(course, achievement, survey_condition) ).click accept_confirm_dialog end.to change { achievement.conditions.count }.by(-1) diff --git a/spec/features/course/assessment_condition_management_spec.rb b/spec/features/course/assessment_condition_management_spec.rb index a90f495fc0a..6f54ca98816 100644 --- a/spec/features/course/assessment_condition_management_spec.rb +++ b/spec/features/course/assessment_condition_management_spec.rb @@ -54,7 +54,7 @@ condition_delete_path = course_assessment_condition_assessment_path(course, assessment, assessment_condition) expect do - find_link(nil, href: condition_delete_path).click + find_button(condition_delete_path).click accept_confirm_dialog expect(page).to have_selector('div.alert-success') end.to change { assessment.conditions.count }.by(-1)