Merge branch 'master' into fix/graphql-issues

This commit is contained in:
Alexandre BODIN 2019-09-17 10:37:04 +02:00 committed by GitHub
commit 2e95a31627
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
52 changed files with 158 additions and 160 deletions

View File

@ -42,6 +42,7 @@ module.exports = {
rules: {
'generator-star-spacing': 0,
'no-console': 0,
'require-atomic-updates': 0,
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn',
},

View File

@ -3,25 +3,25 @@
"dependencies": {},
"devDependencies": {
"@testing-library/jest-dom": "^4.0.0",
"@testing-library/react": "^9.1.1",
"@testing-library/react-hooks": "^2.0.1",
"babel-eslint": "^10.0.1",
"@testing-library/react": "^9.1.0",
"@testing-library/react-hooks": "^2.0.0",
"babel-eslint": "^10.0.0",
"cross-env": "^5.2.0",
"cypress": "3.1.2",
"enzyme": "^3.9.0",
"enzyme-adapter-react-16": "^1.12.1",
"eslint": "^5.16.0",
"eslint-config-prettier": "^6.0.0",
"eslint": "^6.3.0",
"eslint-config-prettier": "^6.2.0",
"eslint-plugin-react": "^7.14.0",
"eslint-plugin-react-hooks": "^1.6.1",
"eslint-plugin-redux-saga": "^1.0.0",
"eslint-plugin-react-hooks": "^2.0.0",
"eslint-plugin-redux-saga": "^1.1.0",
"execa": "^1.0.0",
"husky": "^3.0.0",
"istanbul": "~0.4.2",
"jest": "^24.5.0",
"jest-cli": "^24.5.0",
"lerna": "^3.13.1",
"lint-staged": "^9.1.0",
"lint-staged": "^9.2.0",
"npm-run-all": "^4.1.5",
"prettier": "^1.18.2",
"react-test-renderer": "^16.9.0",

View File

@ -177,7 +177,7 @@ if (NODE_ENV !== 'test') {
import('intl/locale-data/jsonp/en.js'),
import('intl/locale-data/jsonp/de.js'),
])
) // eslint-disable-line prettier/prettier
)
.then(() => render(translationMessages))
.catch(err => {
throw err;

View File

@ -15,7 +15,6 @@ import Reddit from '../../assets/images/social_reddit.png';
import { SocialLinkWrapper } from './components';
/* eslint-disable jsx-a11y/alt-text */
function getSrc(name) {
switch (name) {
case 'GitHub':

View File

@ -92,7 +92,6 @@ export class Onboarding extends React.Component {
this.props.setVideoEnd(index, true);
};
// eslint-disable-line jsx-handler-names
render() {
const { videos, onClick, setVideoDuration } = this.props;
const { showVideos } = this.state;

View File

@ -29,8 +29,8 @@ module.exports = opts => {
},
devDependencies: {
'babel-eslint': '^10.0.0',
eslint: '^6.0.0',
'eslint-config-airbnb': '^17.1.0',
eslint: '^6.3.0',
'eslint-config-airbnb': '^18.0.0',
'eslint-plugin-import': '^2.18.0',
'eslint-plugin-react': '^7.14.0',
},

View File

@ -30,7 +30,7 @@ import App from 'containers/App';
const layout = (() => {
try {
return require('../../../../config/layout.js'); // eslint-disable-line import/no-unresolved
return require('../../../../config/layout.js');
} catch (err) {
return null;
}
@ -38,7 +38,7 @@ const layout = (() => {
const injectedComponents = (() => {
try {
return require('injectedComponents').default; // eslint-disable-line import/no-unresolved
return require('injectedComponents').default;
} catch (err) {
return [];
}
@ -80,7 +80,7 @@ if (module.hot) {
// Require the Initializer component
const initializer = (() => {
try {
return require('../../../../admin/src/initializer.js'); // eslint-disable-line import/no-unresolved
return require('../../../../admin/src/initializer.js');
} catch (err) {
return null;
}
@ -89,7 +89,7 @@ const initializer = (() => {
// Require the plugin's lifecycle
const lifecycles = (() => {
try {
return require('../../../../admin/src/lifecycles.js'); // eslint-disable-line import/no-unresolved
return require('../../../../admin/src/lifecycles.js');
} catch (err) {
return null;
}

View File

@ -10,7 +10,6 @@ import PropTypes from 'prop-types';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/anchor-is-valid */
class GlobalPagination extends React.Component {
getLastPageNumber = () => Math.ceil(this.props.count / this.props.params._limit) || 1;

View File

@ -11,7 +11,6 @@ import cn from 'classnames';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
class InputAddon extends React.Component {
state = { isFocused: false };

View File

@ -12,8 +12,6 @@ import cn from 'classnames';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
/* eslint-disable jsx-a11y/label-has-for */
class InputCheckbox extends React.Component {
handleChange = () => {
const target = {

View File

@ -11,7 +11,6 @@ import cn from 'classnames';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
class InputEmail extends React.Component {
state = { isFocused: false };

View File

@ -17,7 +17,6 @@ import InputFileDetails from '../InputFileDetails';
import styles from './styles.scss';
/* eslint-disable react/jsx-handler-names */
/* eslint-disable jsx-a11y/label-has-for */
class InputFile extends React.Component {
state = {
didDeleteFile: false,
@ -60,7 +59,7 @@ class InputFile extends React.Component {
type: 'file',
value,
};
this.inputFile.value = '';
this.setState({ isUploading: !this.state.isUploading });
this.props.onChange({ target });
@ -105,7 +104,7 @@ class InputFile extends React.Component {
const {value} = this.props;
if (!value ||
(isArray(value) && value.length === 0) ||
(isArray(value) && value.length === 0) ||
(isObject(value) && Object.keys(value).length === 0)
) {
return false;

View File

@ -6,10 +6,9 @@ import cn from 'classnames';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
function InputNumber(props) {
const formattedPlaceholder = props.placeholder === '' ? 'app.utils.placeholder.defaultMessage' : props.placeholder;
return (
<FormattedMessage id={formattedPlaceholder} defaultMessage={formattedPlaceholder}>
{(message) => (

View File

@ -12,7 +12,6 @@ import cn from 'classnames';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
class InputPassword extends React.Component {
state = { showPassword: false };

View File

@ -12,7 +12,6 @@ import cn from 'classnames';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
class InputSearch extends React.Component {
state = { isFocused: false };

View File

@ -15,7 +15,6 @@ import SelectOption from '../SelectOption';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
function InputSelect(props) {
return (
<select

View File

@ -4,7 +4,6 @@ import { isEmpty } from 'lodash';
import { FormattedMessage } from 'react-intl';
import cn from 'classnames';
/* eslint-disable jsx-a11y/no-autofocus */
import styles from './styles.scss';
function InputText(props) {

View File

@ -4,7 +4,6 @@
*
*/
/* eslint-disable jsx-a11y/no-autofocus */
import React from 'react';
import { FormattedMessage } from 'react-intl';
import { isEmpty } from 'lodash';

View File

@ -15,7 +15,6 @@ import InputSpacer from '../InputSpacer';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
class InputTextWithErrors extends React.Component {
// eslint-disable-line react/prefer-stateless-function
state = { errors: [], hasInitialValue: false };

View File

@ -9,7 +9,6 @@ import { isEmpty } from 'lodash';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-autofocus */
class InputToggle extends React.Component {
handleClick = (e) => {
const target = {

View File

@ -6,7 +6,6 @@ import cn from 'classnames';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/label-has-for */
function Label(props) {
let content = props.children;

View File

@ -14,7 +14,6 @@ import GlobalPagination from '../GlobalPagination';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/label-has-for */
function PageFooter(props) {
return (
<div className={cn('row', styles.pageFooter)} style={props.style}>

View File

@ -161,9 +161,9 @@ module.exports = ({ models, target, plugin = false }, ctx) => {
const FK = _.findKey(target.attributes, details => {
if (
details.hasOwnProperty('model') &&
_.has(details, 'model') &&
details.model === model &&
details.hasOwnProperty('via') &&
_.has(details, 'via') &&
details.via === name
) {
return details;
@ -841,7 +841,7 @@ module.exports = ({ models, target, plugin = false }, ctx) => {
_.keyBy(
_.filter(definition.attributes, (value, key) => {
if (
value.hasOwnProperty('columnName') &&
_.has(value, 'columnName') &&
!_.isEmpty(value.columnName) &&
value.columnName !== key
) {

View File

@ -9,7 +9,7 @@ const path = require('path');
// Externals
const co = require('co');
const render = require('koa-ejs'); // eslint-disable-line import/no-unresolved
const render = require('koa-ejs');
/**
* EJS hook

View File

@ -7,7 +7,6 @@
// Core
const util = require('util');
/* eslint-disable prefer-template */
/* eslint-disable import/no-unresolved */
// Public node modules.
const _ = require('lodash');

View File

@ -27,7 +27,7 @@ module.exports = strapi => {
if (_.isPlainObject(views) && !_.isEmpty(views)) {
const opts = _.clone(views);
if (opts.hasOwnProperty('default')) {
if (_.has(opts, 'default')) {
opts.extension = opts.default;
delete opts.default;
}

View File

@ -7,7 +7,6 @@
import React from 'react';
import PropTypes from 'prop-types';
/* eslint-disable jsx-a11y/media-has-caption */
const Video = props => {
const { height, src, width } = props.contentState.getEntity(props.entityKey).getData();

View File

@ -9,7 +9,7 @@ import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/label-has-for */
const WysiwygBottomControls = ({ isPreviewMode, onChange, onClick }) => {
const browse = (
<FormattedMessage id="components.WysiwygBottomControls.uploadFiles.browse">

View File

@ -7,7 +7,6 @@
import React from 'react';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/label-has-for */
const WysiwygDropUpload = (props) => {
return (
<label

View File

@ -6,6 +6,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { has } from 'lodash';
import { FormattedMessage } from 'react-intl';
import pluginId from '../../pluginId';
@ -53,7 +54,7 @@ class AttributesPickerModal extends React.Component {
const appPlugins = plugins;
return attributes.filter(attr => {
if (appPlugins.hasOwnProperty('upload')) {
if (has(appPlugins, 'upload')) {
return true;
}

View File

@ -381,8 +381,8 @@ module.exports = {
(acc, curr) => {
const attribute = attributes[curr];
const isField =
!attribute.hasOwnProperty('model') &&
!attribute.hasOwnProperty('collection');
!_.has(attribute, 'model') &&
!_.has(attribute, 'collection');
if (attribute.required) {
acc.required.push(curr);
@ -1550,8 +1550,8 @@ module.exports = {
.map(attr => {
const attribute = modelAttributes[attr];
const isField =
!attribute.hasOwnProperty('model') &&
!attribute.hasOwnProperty('collection');
!_.has(attribute, 'model') &&
!_.has(attribute, 'collection');
if (!isField) {
const name = attribute.model || attribute.collection;
@ -1758,7 +1758,7 @@ module.exports = {
mergeComponents: (initObj, srcObj) => {
const cleanedObj = Object.keys(_.get(initObj, 'schemas', {})).reduce(
(acc, current) => {
const targetObj = _.get(srcObj, ['schemas'], {}).hasOwnProperty(current)
const targetObj = _.has(_.get(srcObj, ['schemas'], {}), current)
? srcObj
: initObj;
@ -1778,7 +1778,7 @@ module.exports = {
mergePaths: function(initObj, srcObj) {
return Object.keys(initObj.paths).reduce((acc, current) => {
if (_.get(srcObj, ['paths'], {}).hasOwnProperty(current)) {
if (_.has(_.get(srcObj, ['paths'], {}), current)) {
const verbs = Object.keys(initObj.paths[current]).reduce(
(acc1, curr) => {
const verb = this.mergeVerbObject(

View File

@ -59,6 +59,7 @@ module.exports = {
this.loaders[name] = new DataLoader(
keys => {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
try {
// Extract queries from keys and merge similar queries.

View File

@ -23,10 +23,11 @@ module.exports = {
// Extract custom resolver or type description.
const { resolver: handler = {} } = _schema;
let queryName = `${action}${_.capitalize(name)}`;
let queryName;
if (_.has(handler, `Mutation.${action}`)) {
queryName = action;
} else {
queryName = `${action}${_.capitalize(name)}`;
}
// Retrieve policies.

View File

@ -224,14 +224,20 @@ const schemaBuilder = {
switch (type) {
case 'Mutation': {
// TODO: Verify this...
const [name, action] = acc[type][resolver].split('.');
const normalizedName = _.toLower(name);
let name, action;
if (_.isString(acc[type][resolver])) {
[name, action] = acc[type][resolver].split('.');
} else if (
_.isPlainObject(acc[type][resolver]) &&
_.isString(acc[type][resolver].handler)
) {
[name, action] = acc[type][resolver].handler.split('.');
}
acc[type][resolver] = Mutation.composeMutationResolver({
_schema: strapi.plugins.graphql.config._schema.graphql,
plugin,
name: normalizedName,
name: _.toLower(name),
action,
});
break;

View File

@ -21,7 +21,6 @@ import WithInput from '../WithInput';
/* eslint-disable react/require-default-props */
class InputPassword extends React.Component {
// eslint-disable-line react/prefer-stateless-function
/* eslint-disable jsx-a11y/no-static-element-interactions */
constructor(props) {
super(props);
this.state = {

View File

@ -45,7 +45,7 @@ class RowLanguage extends React.Component {
onClick={this.handleToggleWarning}
id={this.props.name}
/>
); // eslint-disable-line jsx-a11y/no-static-element-interactions
);
// format the locale to
const defaultLanguageArray = formatLanguageLocale(this.props.name);
const flag = getFlag(defaultLanguageArray);

View File

@ -153,7 +153,6 @@ export class HomePage extends React.Component {
}
/* eslint-disable react/sort-comp */
/* eslint-disable jsx-a11y/no-static-element-interactions */
addConnection = e => {
e.preventDefault();
const newData = {};

View File

@ -11,7 +11,6 @@ import Label from './Label';
import P from './P';
/* eslint-disable react/no-string-refs */
/* eslint-disable jsx-a11y/label-has-for */
/* eslint-disable react/jsx-tag-spacing */
class PluginInputFile extends React.PureComponent {
state = { isDraging: false };

View File

@ -4,7 +4,6 @@
* Module dependencies
*/
/* eslint-disable import/no-unresolved */
/* eslint-disable prefer-template */
// Public node modules.
const _ = require('lodash');

View File

@ -4,7 +4,6 @@
* Module dependencies
*/
/* eslint-disable import/no-unresolved */
/* eslint-disable prefer-template */
// Public node modules.
const _ = require('lodash');

View File

@ -4,7 +4,6 @@
* Module dependencies
*/
/* eslint-disable import/no-unresolved */
/* eslint-disable prefer-template */
// Public node modules.
const _ = require('lodash');

View File

@ -4,7 +4,6 @@
* Module dependencies
*/
/* eslint-disable import/no-unresolved */
/* eslint-disable no-unused-vars */
// Public node modules.
const _ = require('lodash');

View File

@ -5,7 +5,6 @@
*/
// Public node modules.
/* eslint-disable import/no-unresolved */
/* eslint-disable prefer-template */
const cloudinary = require('cloudinary').v2;
const intoStream = require('into-stream');

View File

@ -4,7 +4,6 @@
* Module dependencies
*/
/* eslint-disable import/no-unresolved */
// Public node modules.
const pkgcloud = require('pkgcloud');
const streamifier = require('streamifier');

View File

@ -15,7 +15,7 @@ module.exports = (api, controller) => {
throw new Error('Should be an object');
}
if (_.isObject(controller) && controller.hasOwnProperty('identity')) {
if (_.isObject(controller) && _.has(controller, 'identity')) {
controller = controller.identity.toLowerCase();
} else if (_.isString(controller)) {
controller = controller.toLowerCase();

View File

@ -52,9 +52,9 @@ module.exports = {
}
if (
(association.hasOwnProperty('collection') &&
(_.has(association, 'collection') &&
association.collection === '*') ||
(association.hasOwnProperty('model') && association.model === '*')
(_.has(association, 'model') && association.model === '*')
) {
if (association.model) {
types.current = 'morphToD';
@ -80,16 +80,16 @@ module.exports = {
_.forIn(allModels, model => {
_.forIn(model.attributes, attribute => {
if (
attribute.hasOwnProperty('via') &&
_.has(attribute, 'via') &&
attribute.via === key &&
attribute.model === currentModelName
) {
if (attribute.hasOwnProperty('collection')) {
if (_.has(attribute, 'collection')) {
types.other = 'collection';
// Break loop
return false;
} else if (attribute.hasOwnProperty('model')) {
} else if (_.has(attribute, 'model')) {
types.other = 'model';
// Break loop
@ -99,8 +99,8 @@ module.exports = {
});
});
} else if (
association.hasOwnProperty('via') &&
association.hasOwnProperty('collection')
_.has(association, 'via') &&
_.has(association, 'collection')
) {
const relatedAttribute =
models[association.collection].attributes[association.via];
@ -120,31 +120,31 @@ module.exports = {
types.current = 'collection';
if (
relatedAttribute.hasOwnProperty('collection') &&
_.has(relatedAttribute, 'collection') &&
relatedAttribute.collection !== '*' &&
relatedAttribute.hasOwnProperty('via')
_.has(relatedAttribute, 'via')
) {
types.other = 'collection';
} else if (
relatedAttribute.hasOwnProperty('collection') &&
_.has(relatedAttribute, 'collection') &&
relatedAttribute.collection !== '*' &&
!relatedAttribute.hasOwnProperty('via')
!_.has(relatedAttribute, 'via')
) {
types.other = 'collectionD';
} else if (
relatedAttribute.hasOwnProperty('model') &&
_.has(relatedAttribute, 'model') &&
relatedAttribute.model !== '*'
) {
types.other = 'model';
} else if (
relatedAttribute.hasOwnProperty('collection') ||
relatedAttribute.hasOwnProperty('model')
_.has(relatedAttribute, 'collection') ||
_.has(relatedAttribute, 'model')
) {
types.other = 'morphTo';
}
} else if (
association.hasOwnProperty('via') &&
association.hasOwnProperty('model')
_.has(association, 'via') &&
_.has(association, 'model')
) {
types.current = 'modelD';
@ -153,32 +153,32 @@ module.exports = {
const attribute = model.attributes[association.via];
if (
attribute.hasOwnProperty('via') &&
_.has(attribute, 'via') &&
attribute.via === key &&
attribute.hasOwnProperty('collection') &&
_.has(attribute, 'collection') &&
attribute.collection !== '*'
) {
types.other = 'collection';
} else if (
attribute.hasOwnProperty('model') &&
_.has(attribute, 'model') &&
attribute.model !== '*'
) {
types.other = 'model';
} else if (
attribute.hasOwnProperty('collection') ||
attribute.hasOwnProperty('model')
_.has(attribute, 'collection') ||
_.has(attribute, 'model')
) {
types.other = 'morphTo';
}
} else if (association.hasOwnProperty('model')) {
} else if (_.has(association, 'model')) {
types.current = 'model';
// We have to find if they are a model linked to this key
_.forIn(models, model => {
_.forIn(model.attributes, attribute => {
if (attribute.hasOwnProperty('via') && attribute.via === key) {
if (_.has(attribute, 'via') && attribute.via === key) {
if (
attribute.hasOwnProperty('collection') &&
_.has(attribute, 'collection') &&
attribute.collection === currentModelName
) {
types.other = 'collection';
@ -186,7 +186,7 @@ module.exports = {
// Break loop
return false;
} else if (
attribute.hasOwnProperty('model') &&
_.has(attribute, 'model') &&
attribute.model === currentModelName
) {
types.other = 'modelD';
@ -197,15 +197,15 @@ module.exports = {
}
});
});
} else if (association.hasOwnProperty('collection')) {
} else if (_.has(association, 'collection')) {
types.current = 'collectionD';
// We have to find if they are a model linked to this key
_.forIn(models, model => {
_.forIn(model.attributes, attribute => {
if (attribute.hasOwnProperty('via') && attribute.via === key) {
if (_.has(attribute, 'via') && attribute.via === key) {
if (
attribute.hasOwnProperty('collection') &&
_.has(attribute, 'collection') &&
attribute.collection === currentModelName
) {
types.other = 'collection';
@ -213,7 +213,7 @@ module.exports = {
// Break loop
return false;
} else if (
attribute.hasOwnProperty('model') &&
_.has(attribute, 'model') &&
attribute.model === currentModelName
) {
types.other = 'modelD';
@ -258,7 +258,7 @@ module.exports = {
};
} else if (
types.current === 'morphTo' &&
(types.other === 'model' || association.hasOwnProperty('model'))
(types.other === 'model' || _.has(association, 'model'))
) {
return {
nature: 'manyMorphToOne',
@ -267,7 +267,7 @@ module.exports = {
} else if (
types.current === 'morphTo' &&
(types.other === 'collection' ||
association.hasOwnProperty('collection'))
_.has(association, 'collection'))
) {
return {
nature: 'manyMorphToMany',
@ -557,7 +557,7 @@ module.exports = {
}, {})
);
if (!models.hasOwnProperty(model)) {
if (!_.has(models, model)) {
return this.log.error(`The model ${model} can't be found.`);
}

View File

@ -269,7 +269,7 @@ module.exports = function(strapi) {
);
acc[current] = !_.isObject(currentSettings) ? {} : currentSettings;
if (!acc[current].hasOwnProperty('enabled')) {
if (!_.has(acc[current], 'enabled')) {
strapi.log.warn(
`(middleware:${current}) wasn't loaded due to missing key \`enabled\` in the configuration`
);
@ -295,7 +295,7 @@ module.exports = function(strapi) {
acc[current] = !_.isObject(currentSettings) ? {} : currentSettings;
if (!acc[current].hasOwnProperty('enabled')) {
if (!_.has(acc[current], 'enabled')) {
strapi.log.warn(
`(hook:${current}) wasn't loaded due to missing key \`enabled\` in the configuration`
);

View File

@ -54,7 +54,7 @@ module.exports = strapi => {
// Exclude routes with prefix.
const excludedRoutes = _.omitBy(
plugin.config.routes,
o => !o.config.hasOwnProperty('prefix')
o => !_.has(o.config, 'prefix')
);
_.forEach(

View File

@ -24,7 +24,7 @@ module.exports = strapi => {
strapi.config.hooks.session.secretKeys;
if (
strapi.config.middleware.settings.session.hasOwnProperty('client') &&
_.has(strapi.config.middleware.settings.session, 'client') &&
_.isString(strapi.config.middleware.settings.session.client) &&
strapi.config.middleware.settings.session.client !== 'cookie'
) {
@ -52,7 +52,7 @@ module.exports = strapi => {
});
}
} else if (
strapi.config.middleware.settings.session.hasOwnProperty('client') &&
_.has(strapi.config.middleware.settings.session, 'client') &&
_.isString(strapi.config.middleware.settings.session.client) &&
strapi.config.middleware.settings.session.client === 'cookie'
) {
@ -159,6 +159,7 @@ module.exports = strapi => {
},
requireStore(store) {
// eslint-disable-next-line no-useless-catch
try {
return require(path.resolve(
strapi.config.appPath,

View File

@ -1,12 +1,11 @@
'use strict';
/* eslint-disable import/order */
/* eslint-disable no-unused-vars */
/* eslint-disable prefer-template */
// Dependencies.
const fs = require('fs');
const path = require('path');
const { map } = require('async'); // eslint-disable-line import/order
const { map } = require('async');
const {
setWith,
merge,

View File

@ -1,4 +1,3 @@
/* eslint-disable import/no-extraneous-dependencies */
const configure = require('enzyme').configure;
const Adapter = require('enzyme-adapter-react-16');

121
yarn.lock
View File

@ -2140,7 +2140,7 @@
pretty-format "^24.0.0"
redent "^3.0.0"
"@testing-library/react-hooks@^2.0.1":
"@testing-library/react-hooks@^2.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-2.0.1.tgz#1c3ec40882d0830df3078ddae0056fdf7366c81d"
integrity sha512-MLTvWX7/csq/uQzP4WJntGz0QJDq6H4EzjV0VTL5YJE7KBZbaQ9DGT0IbtjuB33L4R4YKZ55rGZQ5eL+WiZtQA==
@ -2149,7 +2149,7 @@
"@types/react" ">=16.9.0"
"@types/react-test-renderer" ">=16.9.0"
"@testing-library/react@^9.1.1":
"@testing-library/react@^9.1.0":
version "9.1.4"
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.1.4.tgz#4cc1a228a944c0f468ee501e7da1651d8bbd9902"
integrity sha512-fQ/PXZoLcmnS1W5ZiM3P7XBy2x6Hm9cJAT/ZDuZKzJ1fS1rN3j31p7ReAqUe3N1kJ46sNot0n1oiGbz7FPU+FA==
@ -2255,9 +2255,9 @@
"@types/jquery" "*"
"@types/chai@*":
version "4.2.1"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.1.tgz#de162553aceca778d989929d821c5d4942921ebc"
integrity sha512-LDKlQW/V8bQr5p9aoHye9p7x9faxq0GVeWAkn/Zgyyn848LIAzuR1sHQjGmUBFUpINuGWDG2NTM/ofA2aLMIew==
version "4.2.2"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.2.tgz#6b825013863d04868c15624ec8b7fdced88a47c6"
integrity sha512-8V2aCcPM3WLuJvJpF6N60uUvdZb7NHjpjQlLk1QmZbTP4XZET/FX0c3TJ3K7qt4L98FS1Pifa8BVofTVuJFWVA==
"@types/chai@4.0.8":
version "4.0.8"
@ -2877,7 +2877,7 @@ acorn-globals@^4.1.0:
acorn "^6.0.1"
acorn-walk "^6.0.1"
acorn-jsx@^5.0.0:
acorn-jsx@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
@ -2892,7 +2892,7 @@ acorn@^5.5.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
acorn@^6.0.1, acorn@^6.0.7, acorn@^6.2.1:
acorn@^6.0.1, acorn@^6.2.1:
version "6.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
@ -2979,7 +2979,7 @@ ajv@^5.1.0:
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0"
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1:
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
version "6.10.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
@ -3618,7 +3618,7 @@ aws4@^1.6.0, aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
babel-eslint@^10.0.1:
babel-eslint@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a"
integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==
@ -6731,17 +6731,17 @@ escodegen@1.x.x, escodegen@^1.9.1:
optionalDependencies:
source-map "~0.6.1"
eslint-config-prettier@^6.0.0:
eslint-config-prettier@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz#80e0b8714e3f6868c4ac2a25fbf39c02e73527a7"
integrity sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ==
dependencies:
get-stdin "^6.0.0"
eslint-plugin-react-hooks@^1.6.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
eslint-plugin-react-hooks@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.0.1.tgz#e898ec26a0a335af6f7b0ad1f0bedda7143ed756"
integrity sha512-xir+3KHKo86AasxlCV8AHRtIZPHljqCRRUYgASkbatmt0fad4+5GgC7zkT7o/06hdKM6MIwp8giHVXqBPaarHQ==
eslint-plugin-react@^7.14.0:
version "7.14.3"
@ -6758,7 +6758,7 @@ eslint-plugin-react@^7.14.0:
prop-types "^15.7.2"
resolve "^1.10.1"
eslint-plugin-redux-saga@^1.0.0:
eslint-plugin-redux-saga@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-redux-saga/-/eslint-plugin-redux-saga-1.1.0.tgz#e47e5572e4f951eb5bbda11cf7e07bea391a468a"
integrity sha512-h6QCo7qQGUQR+sXnkgU4aTo8vMI/I0tttM3fk0jdkP7wqTNHGvSyJLGFFchwiBqg6Tfg64zK68tzSq31wesS6w==
@ -6771,68 +6771,77 @@ eslint-scope@^4.0.3:
esrecurse "^4.1.0"
estraverse "^4.1.1"
eslint-utils@^1.3.1:
eslint-scope@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
dependencies:
esrecurse "^4.1.0"
estraverse "^4.1.1"
eslint-utils@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
dependencies:
eslint-visitor-keys "^1.0.0"
eslint-visitor-keys@^1.0.0:
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
eslint@^5.16.0:
version "5.16.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
eslint@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a"
integrity sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.9.1"
ajv "^6.10.0"
chalk "^2.1.0"
cross-spawn "^6.0.5"
debug "^4.0.1"
doctrine "^3.0.0"
eslint-scope "^4.0.3"
eslint-utils "^1.3.1"
eslint-visitor-keys "^1.0.0"
espree "^5.0.1"
eslint-scope "^5.0.0"
eslint-utils "^1.4.2"
eslint-visitor-keys "^1.1.0"
espree "^6.1.1"
esquery "^1.0.1"
esutils "^2.0.2"
file-entry-cache "^5.0.1"
functional-red-black-tree "^1.0.1"
glob "^7.1.2"
glob-parent "^5.0.0"
globals "^11.7.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
inquirer "^6.2.2"
js-yaml "^3.13.0"
inquirer "^6.4.1"
is-glob "^4.0.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.3.0"
lodash "^4.17.11"
lodash "^4.17.14"
minimatch "^3.0.4"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
optionator "^0.8.2"
path-is-inside "^1.0.2"
progress "^2.0.0"
regexpp "^2.0.1"
semver "^5.5.1"
strip-ansi "^4.0.0"
strip-json-comments "^2.0.1"
semver "^6.1.2"
strip-ansi "^5.2.0"
strip-json-comments "^3.0.1"
table "^5.2.3"
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
espree@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
espree@^6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de"
integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==
dependencies:
acorn "^6.0.7"
acorn-jsx "^5.0.0"
eslint-visitor-keys "^1.0.0"
acorn "^7.0.0"
acorn-jsx "^5.0.2"
eslint-visitor-keys "^1.1.0"
esprima@2.7.x, esprima@^2.7.1:
version "2.7.3"
@ -9187,7 +9196,7 @@ init-package-json@^1.10.3:
validate-npm-package-license "^3.0.1"
validate-npm-package-name "^3.0.0"
inquirer@^6.2.0, inquirer@^6.2.1, inquirer@^6.2.2, inquirer@^6.3.1:
inquirer@^6.2.0, inquirer@^6.2.1, inquirer@^6.2.2, inquirer@^6.3.1, inquirer@^6.4.1:
version "6.5.2"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
@ -10365,7 +10374,7 @@ js-levenshtein@^1.1.3:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-yaml@3.x, js-yaml@^3.13.0, js-yaml@^3.13.1:
js-yaml@3.x, js-yaml@^3.13.1:
version "3.13.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
@ -11009,7 +11018,7 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
lint-staged@^9.1.0:
lint-staged@^9.2.0:
version "9.2.5"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.2.5.tgz#5a3e1e0a539a403bd7f88542bc3d34ce52efdbb3"
integrity sha512-d99gTBFMJ29159+9iRvaMEQstmNcPAbQbhHSYw6D/1FncvFdIj8lWHztaq3Uq+tbZPABHXQ/fyN7Rp1QwF8HIw==
@ -12451,9 +12460,9 @@ node-pre-gyp@^0.12.0:
tar "^4"
node-releases@^1.1.29:
version "1.1.29"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.29.tgz#86a57c6587a30ecd6726449e5d293466b0a0bb86"
integrity sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==
version "1.1.30"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.30.tgz#35eebf129c63baeb6d8ddeda3c35b05abfd37f7f"
integrity sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw==
dependencies:
semver "^5.3.0"
@ -17597,7 +17606,12 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
strip-json-comments@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
@ -17924,9 +17938,9 @@ terser@^3.14.1:
source-map-support "~0.5.10"
terser@^4.1.2, terser@^4.1.3:
version "4.3.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.0.tgz#0259070576ff34d89c5cd2b8d91055cdce0212d5"
integrity sha512-w5CzrvQOwYAH54aG22IrUJI4yX1w62XQmMdEOM6H4w0ii6rc3HJ89fmcOGN5mRwBWfUgaqO7RJTp4aoY/uE+qQ==
version "4.3.1"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.1.tgz#09820bcb3398299c4b48d9a86aefc65127d0ed65"
integrity sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==
dependencies:
commander "^2.20.0"
source-map "~0.6.1"
@ -18629,6 +18643,11 @@ v8-compile-cache@2.0.3:
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
v8-compile-cache@^2.0.3:
version "2.1.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
v8flags@^3.1.2, v8flags@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8"