+ This fixture outputs console.log messages showing each time each of these
+ components gets rendered and each time the memoized button inside gets
+ rendered.
+
+ {
const recordId = record[uniqueIdAttribute];
const whenAnotherRowIsEditing = Boolean(idOfRecordInEditMode);
- /**
- * this seems like ugly, we need to find a better way
- * to ease testing.. */
- let cancelTestId = {};
- let editTestId = {};
- let saveTestId = {};
+ // this seems like ugly, we need to find a better way
+ // to ease testing..
+ const cancelTestId = {};
+ const editTestId = {};
+ const saveTestId = {};
if (typeof dataTestIDs === 'object') {
cancelTestId['data-testid'] = dataTestIDs['cancel'];
@@ -45,7 +44,7 @@ const ActionEdit = ({ dataTestIDs, editLabel = 'Edit' }) => {
saveTestId['data-testid'] = dataTestIDs['save'];
}
- const handleReset = () => {
+ const handleReset = useCallback(() => {
onAction(
// fake target
{
@@ -57,19 +56,18 @@ const ActionEdit = ({ dataTestIDs, editLabel = 'Edit' }) => {
);
exitEditMode();
- };
+ }, [exitEditMode, onAction, record]);
- const handleCancel = () => {
+ const handleCancel = useCallback(() => {
isDirty
- ? // eslint-disable-next-line no-restricted-globals
+ ? // eslint-disable-next-line no-restricted-globals, no-alert -- For now we do not have our own confirmation dialog so we are using native confirms
confirm('Abandon unsaved changes?') && handleReset()
: handleReset();
- };
+ }, [handleReset, isDirty]);
- const handleEdit = () => {
- /**
- * FDS-91: We are resetting the form with whatever is in record.
- * We don't know if this is the best way to do it in React. */
+ const handleEdit = useCallback(() => {
+ // FDS-91: We are resetting the form with whatever is in record.
+ // We don't know if this is the best way to do it in React.
reset({ ...record });
onAction(
// fake target
@@ -82,22 +80,25 @@ const ActionEdit = ({ dataTestIDs, editLabel = 'Edit' }) => {
);
enterEditMode(recordId);
- };
+ }, [enterEditMode, onAction, record, recordId, reset]);
- const onSubmit = (data) => {
- onAction(
- // fake target
- {
- name: 'edit.save',
- },
- {
- ...record,
- ...data,
- }
- );
+ const onSubmit = useCallback(
+ (data) => {
+ onAction(
+ // fake target
+ {
+ name: 'edit.save',
+ },
+ {
+ ...record,
+ ...data,
+ }
+ );
- exitEditMode();
- };
+ exitEditMode();
+ },
+ [exitEditMode, onAction, record]
+ );
return isEditing ? (
<>
diff --git a/packages/cascara/src/modules/AllModules.fixture.js b/packages/cascara/src/modules/AllModules.fixture.js
index ac404a4fd..64668a84f 100644
--- a/packages/cascara/src/modules/AllModules.fixture.js
+++ b/packages/cascara/src/modules/AllModules.fixture.js
@@ -1,4 +1,3 @@
-/* eslint-disable react/no-multi-comp */
import React from 'react';
import { ModuleProvider } from './context';
import FormProvider from '../ui/Form/context/FormProvider';
@@ -54,7 +53,7 @@ const ALL_DATA_MODULES = (
-
+
{/* { } */}
>
@@ -93,7 +92,7 @@ const fakeRow = (
-
+
{/* {
diff --git a/packages/cascara/src/modules/DataCheckbox/DataCheckbox.js b/packages/cascara/src/modules/DataCheckbox/DataCheckbox.js
index b2ae38790..66cfd1f3b 100644
--- a/packages/cascara/src/modules/DataCheckbox/DataCheckbox.js
+++ b/packages/cascara/src/modules/DataCheckbox/DataCheckbox.js
@@ -10,8 +10,6 @@ import ErrorBoundary from '../../shared/ErrorBoundary';
const propTypes = {
/** A module can have an Attribute, which will be used as form field name */
attribute: pt.string,
- /** A module can have a data test id, which will be used in tests */
- 'data-testid': pt.string,
/** A Module can be defined to not present an editing state */
isEditable: pt.bool,
/** Presents the input without a label. NOT USER CONFIGURABLE */
diff --git a/packages/cascara/src/modules/DataEmail/DataEmail.js b/packages/cascara/src/modules/DataEmail/DataEmail.js
index b45ff1af5..ae0179497 100644
--- a/packages/cascara/src/modules/DataEmail/DataEmail.js
+++ b/packages/cascara/src/modules/DataEmail/DataEmail.js
@@ -9,8 +9,6 @@ import ErrorBoundary from '../../shared/ErrorBoundary';
const propTypes = {
/** A module can have an Attribute, which will be used as form field name */
attribute: pt.string,
- /** A module can have a data test id, which will be used in tests */
- 'data-testid': pt.string,
/** A Module can be defined to not present an editing state */
isEditable: pt.bool,
/** Presents the input without a label. NOT USER CONFIGURABLE */
diff --git a/packages/cascara/src/modules/DataNumber/DataNumber.js b/packages/cascara/src/modules/DataNumber/DataNumber.js
index d34625027..16407dc48 100644
--- a/packages/cascara/src/modules/DataNumber/DataNumber.js
+++ b/packages/cascara/src/modules/DataNumber/DataNumber.js
@@ -9,8 +9,6 @@ import ErrorBoundary from '../../shared/ErrorBoundary';
const propTypes = {
/** A module can have an Attribute, which will be used as form field name */
attribute: pt.string,
- /** A module can have a data test id, which will be used in tests */
- 'data-testid': pt.string,
/** A Module can be defined to not present an editing state */
isEditable: pt.bool,
/** Presents the input without a label. NOT USER CONFIGURABLE */
diff --git a/packages/cascara/src/modules/DataRadio/DataRadio.js b/packages/cascara/src/modules/DataRadio/DataRadio.js
index 4ab1894e0..c95168c28 100644
--- a/packages/cascara/src/modules/DataRadio/DataRadio.js
+++ b/packages/cascara/src/modules/DataRadio/DataRadio.js
@@ -9,8 +9,6 @@ import ErrorBoundary from '../../shared/ErrorBoundary';
const propTypes = {
/** A module can have an Attribute, which will be used as form field name */
attribute: pt.string,
- /** A module can have a data test id, which will be used in tests */
- 'data-testid': pt.string,
/** A Module can be defined to not present an editing state */
isEditable: pt.bool,
/** Presents the input without a label. NOT USER CONFIGURABLE */
diff --git a/packages/cascara/src/modules/DataSelect/DataSelect.js b/packages/cascara/src/modules/DataSelect/DataSelect.js
index 6f09771da..f8aea57ae 100644
--- a/packages/cascara/src/modules/DataSelect/DataSelect.js
+++ b/packages/cascara/src/modules/DataSelect/DataSelect.js
@@ -9,14 +9,19 @@ import ErrorBoundary from '../../shared/ErrorBoundary';
const propTypes = {
/** A module can have an Attribute, which will be used as form field name */
attribute: pt.string,
- /** A module can have a data test id, which will be used in tests */
- 'data-testid': pt.string,
/** A Module can be defined to not present an editing state */
isEditable: pt.bool,
/** Presents the input without a label. NOT USER CONFIGURABLE */
isLabeled: pt.bool,
/** A Module needs to have a unique label relative to its context */
label: pt.string,
+ /** Select module can have selectable options */
+ options: pt.arrayOf(
+ pt.shape({
+ key: pt.string,
+ value: pt.oneOfType([pt.string, pt.number]),
+ })
+ ),
/** A Module can have a value */
value: pt.string,
};
diff --git a/packages/cascara/src/modules/DataText/DataText.js b/packages/cascara/src/modules/DataText/DataText.js
index 96275eed6..961b042b4 100644
--- a/packages/cascara/src/modules/DataText/DataText.js
+++ b/packages/cascara/src/modules/DataText/DataText.js
@@ -9,8 +9,6 @@ import ErrorBoundary from '../../shared/ErrorBoundary';
const propTypes = {
/** A module can have an Attribute, which will be used as form field name */
attribute: pt.string,
- /** A module can have a data test id, which will be used in tests */
- 'data-testid': pt.string,
/** A Module can be defined to not present an editing state */
isEditable: pt.bool,
/** Presents the input without a label. NOT USER CONFIGURABLE */
diff --git a/packages/cascara/src/modules/DataTextArea/DataTextArea.js b/packages/cascara/src/modules/DataTextArea/DataTextArea.js
index 3b91540a2..8e6ee0ed1 100644
--- a/packages/cascara/src/modules/DataTextArea/DataTextArea.js
+++ b/packages/cascara/src/modules/DataTextArea/DataTextArea.js
@@ -10,8 +10,6 @@ import ErrorBoundary from '../../shared/ErrorBoundary';
const propTypes = {
/** A module can have an Attribute, which will be used as form field name */
attribute: pt.string,
- /** A module can have a data test id, which will be used in tests */
- 'data-testid': pt.string,
/** A Module can be defined to not present an editing state */
isEditable: pt.bool,
/** Presents the input without a label. NOT USER CONFIGURABLE */
@@ -33,7 +31,6 @@ const DataTextArea = ({
const { isEditing, formMethods } = useContext(ModuleContext);
const renderEditing = (
- // eslint-disable-next-line jsx-a11y/label-has-for
{label && isLabeled && {label} }
{
- const blob = new Blob([data], { fileType });
- const url = URL.createObjectURL(blob);
-
- return (
-
-
- {ctaText}
-
-
- );
-};
-
-DownloadButton.displaName = 'DownloadButton';
-DownloadButton.propTypes = propTypes;
-
-export { propTypes };
-export default DownloadButton;
diff --git a/packages/cascara/src/modules/DownloadButton/index.js b/packages/cascara/src/modules/DownloadButton/index.js
deleted file mode 100644
index 3f39d7c2d..000000000
--- a/packages/cascara/src/modules/DownloadButton/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default, propTypes } from './DownloadButton';
diff --git a/packages/cascara/src/modules/ModuleError/ModuleError.js b/packages/cascara/src/modules/ModuleError/ModuleError.js
index 0479a08aa..35f88a9bc 100644
--- a/packages/cascara/src/modules/ModuleError/ModuleError.js
+++ b/packages/cascara/src/modules/ModuleError/ModuleError.js
@@ -4,14 +4,15 @@ import styles from '../DataModule.module.scss';
const propTypes = {
moduleName: pt.string.isRequired,
- moduleOptions: pt.array.isRequired,
+ moduleOptions: pt.arrayOf(pt.object).isRequired,
};
const ModuleError = ({ moduleName, moduleOptions }) => {
const message = `${moduleName} is not a valid value for module. Try using one of [${moduleOptions.join(
', '
)}]`;
- // eslint-disable-next-line no-console
+
+ // eslint-disable-next-line no-console -- we need to display this error to develop
console.error(message);
return (
diff --git a/packages/cascara/src/modules/context/ModuleProvider.js b/packages/cascara/src/modules/context/ModuleProvider.js
index 60729571a..902d07e1c 100644
--- a/packages/cascara/src/modules/context/ModuleProvider.js
+++ b/packages/cascara/src/modules/context/ModuleProvider.js
@@ -1,12 +1,21 @@
import React from 'react';
-import ModuleContext from './ModuleContext';
+import pt from 'prop-types';
+
+import ModuleContext, { defaultValue } from './ModuleContext';
import useToggle from '../../hooks/useToggle';
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ value: pt.shape({
+ isEditing: pt.bool,
+ }),
+};
+
const ModuleProvider = ({ children, value, ...props }) => {
const [isEditing, setIsEditing] = useToggle(value?.isEditing || false);
const mergedValues = {
- ...ModuleContext.defaultValue,
+ ...defaultValue,
isEditing,
setIsEditing,
...value,
@@ -19,4 +28,6 @@ const ModuleProvider = ({ children, value, ...props }) => {
);
};
+ModuleProvider.propTypes = propTypes;
+
export default ModuleProvider;
diff --git a/packages/cascara/src/modules/poc/ContextComposability.fixture.js b/packages/cascara/src/modules/poc/ContextComposability.fixture.js
index e1260d671..b2bd265c8 100644
--- a/packages/cascara/src/modules/poc/ContextComposability.fixture.js
+++ b/packages/cascara/src/modules/poc/ContextComposability.fixture.js
@@ -1,7 +1,6 @@
-/* eslint-disable react/no-multi-comp */
import React, { useContext } from 'react';
import JsonPlaceholder from '../../placeholders/JsonPlaceholder';
-import ReusableModuleContext from './ReusableModuleContext';
+import ReusableModuleContext, { defaultValue } from './ReusableModuleContext';
// Here is a custom provider that can exist alone, or it can also exist with a parent context.
// The magic for each use case can exist with how we define these providers and what we need them to do
@@ -17,7 +16,7 @@ const ReusableProvider = ({ children, value, ...props }) => {
// 2. This pattern can be used to make sure we always have props present for things a Module might need
// 3. The same reusable context can now also be used to compose a special provider that does this on a case by case basis
const mergedValues = {
- ...ReusableModuleContext.defaultValue,
+ ...defaultValue,
...grandparentValues,
...value,
};
diff --git a/packages/cascara/src/modules/poc/ContextComposableActions.fixture.js b/packages/cascara/src/modules/poc/ContextComposableActions.fixture.js
index 00c35be07..aa5502eee 100644
--- a/packages/cascara/src/modules/poc/ContextComposableActions.fixture.js
+++ b/packages/cascara/src/modules/poc/ContextComposableActions.fixture.js
@@ -1,4 +1,3 @@
-/* eslint-disable react/no-multi-comp */
import React from 'react';
import DataText from '../DataText';
import ActionButton from '../ActionButton';
@@ -115,7 +114,7 @@ const ContextComposableActions = ({ data, dataConfig }) => {
{fakeTableData.map((row, i) => (
-
+
))}
diff --git a/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.fixture.js b/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.fixture.js
index 8e6cce93d..f69949ec9 100644
--- a/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.fixture.js
+++ b/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.fixture.js
@@ -1,13 +1,7 @@
import React from 'react';
import AreaPlaceholder from './AreaPlaceholder';
-/* eslint-disable sort-keys */
export default {
- default: (
-
- Yo
-
- ),
contextExample: (
@@ -17,5 +11,9 @@ export default {
),
+ default: (
+
+ Yo
+
+ ),
};
-/* eslint-enable sort-keys */
diff --git a/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.js b/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.js
index 3b087342f..482c49303 100644
--- a/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.js
+++ b/packages/cascara/src/placeholders/AreaPlaceholder/AreaPlaceholder.js
@@ -3,10 +3,14 @@ import pt from 'prop-types';
import styles from './AreaPlaceholder.module.scss';
const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
/** Color of the border */
color: pt.string,
/** Label for the container */
label: pt.string,
+ /** Label can have style */
+ // eslint-disable-next-line react/forbid-prop-types -- We do not know what the object params might be in this case
+ style: pt.object,
};
const AreaPlaceholder = ({
diff --git a/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.fixture.js b/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.fixture.js
index 3fd9da573..202531c6e 100644
--- a/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.fixture.js
+++ b/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.fixture.js
@@ -8,24 +8,25 @@ const testJson = {
},
};
-/* eslint-disable sort-keys */
export default {
- default: ,
- isInitialOpen: ,
- title: ,
- style: (
+ className: (
),
- className: (
+ default: ,
+ isInitialOpen: ,
+ style: (
),
+ title: ,
};
-/* eslint-enable sort-keys */
diff --git a/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.js b/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.js
index 237b88b8f..78087ad3c 100644
--- a/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.js
+++ b/packages/cascara/src/placeholders/JsonPlaceholder/JsonPlaceholder.js
@@ -20,7 +20,7 @@ const JsonPlaceholder = ({
diff --git a/packages/cascara/src/shared/recordUtils.js b/packages/cascara/src/shared/recordUtils.js
index 5786fbfa2..08ddb47f8 100644
--- a/packages/cascara/src/shared/recordUtils.js
+++ b/packages/cascara/src/shared/recordUtils.js
@@ -1,5 +1,8 @@
const getAttributeValueFromRecord = (attribute, record = {}) => {
- const attributeExists = record.hasOwnProperty(attribute);
+ const attributeExists = Object.prototype.hasOwnProperty.call(
+ record,
+ attribute
+ );
if (attributeExists) {
return record[attribute];
diff --git a/packages/cascara/src/structures/Admin/Admin.fixture.js b/packages/cascara/src/structures/Admin/Admin.fixture.js
index ff84060aa..950664774 100644
--- a/packages/cascara/src/structures/Admin/Admin.fixture.js
+++ b/packages/cascara/src/structures/Admin/Admin.fixture.js
@@ -106,7 +106,6 @@ const longContent = (
);
-/* eslint-disable sort-keys */
export default {
NoDrawer: (
),
};
-/* eslint-enable sort-keys */
diff --git a/packages/cascara/src/structures/Admin/package.json b/packages/cascara/src/structures/Admin/package.json
index 8db4c8d40..7b472dd3c 100644
--- a/packages/cascara/src/structures/Admin/package.json
+++ b/packages/cascara/src/structures/Admin/package.json
@@ -1,22 +1,22 @@
{
"name": "admin",
"version": "0.1.0",
+ "license": "MIT",
+ "sideEffects": false,
"main": "cjs/index.js",
"module": "es/index.js",
"files": [
"cjs",
"dist"
],
- "sideEffects": false,
- "license": "MIT",
- "dependencies": {
- "prop-types": "15.7.2",
- "react": "16.13.1",
- "react-dom": "16.13.1"
- },
"scripts": {
"clean": "rm -rf dist && rm -rf es",
"build": "yarn clean && rollup -c",
"watch": "rollup -c -w"
+ },
+ "dependencies": {
+ "prop-types": "15.7.2",
+ "react": "16.13.1",
+ "react-dom": "16.13.1"
}
}
diff --git a/packages/cascara/src/structures/Admin/rollup.config.js b/packages/cascara/src/structures/Admin/rollup.config.js
index 54c79ce12..5d18a8a6d 100644
--- a/packages/cascara/src/structures/Admin/rollup.config.js
+++ b/packages/cascara/src/structures/Admin/rollup.config.js
@@ -1,3 +1,3 @@
-import { getRollupConfig } from '../../../rollup.config';
+import getRollupConfig from '../../../rollup.config';
export default getRollupConfig({ pwd: __dirname });
diff --git a/packages/cascara/src/ui/ActionsMenu/ActionsMenu.js b/packages/cascara/src/ui/ActionsMenu/ActionsMenu.js
index c0d57d18e..c3508f3e8 100644
--- a/packages/cascara/src/ui/ActionsMenu/ActionsMenu.js
+++ b/packages/cascara/src/ui/ActionsMenu/ActionsMenu.js
@@ -1,12 +1,13 @@
import pt from 'prop-types';
-import React, { useContext, useRef } from 'react';
-import { Menu, MenuButton, MenuItem, useMenuState } from 'reakit/Menu';
+import React, { useRef } from 'react';
+import { Menu, MenuButton, useMenuState } from 'reakit/Menu';
import { Button } from 'reakit/Button';
+import ActionsMenuItem from './ActionsMenuItem';
import styles from './ActionsMenu.module.scss';
import { popperOverTrigger } from '../../shared/popperModifiers';
-import { ModuleContext } from '../../modules/context';
+const MemoActionsMenuItem = React.memo(ActionsMenuItem);
const DEFAULT_TRIGGER = (
⋯
@@ -15,11 +16,10 @@ const DEFAULT_TRIGGER = (
const propTypes = {
actions: pt.arrayOf(pt.object).isRequired,
+ trigger: pt.element,
};
const ActionsMenu = ({ trigger = DEFAULT_TRIGGER, actions }) => {
- const { onAction, record } = useContext(ModuleContext);
-
// Set a ref on our trigger to pass into the disclosure and also measure clientHeight
const triggerRef = useRef();
@@ -33,12 +33,6 @@ const ActionsMenu = ({ trigger = DEFAULT_TRIGGER, actions }) => {
unstable_popperModifiers: [popperOverTrigger],
});
- const handleMenuItemClick = (item) => {
- menu.hide();
-
- onAction(item, record);
- };
-
return (
<>
@@ -47,31 +41,21 @@ const ActionsMenu = ({ trigger = DEFAULT_TRIGGER, actions }) => {
- {actions.map(({ content, isLabeled, name, ...rest }, actionIndex) => {
- // FDS-137: use action name for button name if no content is specified
- const buttonText = content || name;
- const key = `action.${actionIndex}-${name}.${content}`;
-
- return (
- handleMenuItemClick(rest)}
- >
- {buttonText}
-
- );
- })}
+ {actions.map((action, actionIndex) => (
+
+ ))}
>
diff --git a/packages/cascara/src/ui/ActionsMenu/ActionsMenuItem.js b/packages/cascara/src/ui/ActionsMenu/ActionsMenuItem.js
new file mode 100644
index 000000000..8cee3611b
--- /dev/null
+++ b/packages/cascara/src/ui/ActionsMenu/ActionsMenuItem.js
@@ -0,0 +1,67 @@
+import pt from 'prop-types';
+import React, { useCallback, useContext } from 'react';
+import { MenuItem } from 'reakit/Menu';
+
+import styles from './ActionsMenu.module.scss';
+import { ModuleContext } from '../../modules/context';
+
+const propTypes = {
+ actionIndex: pt.number,
+ actionName: pt.string,
+ content: pt.string,
+ isLabeled: pt.bool,
+ menu: pt.shape({
+ hide: pt.func,
+ modal: pt.bool,
+ placement: pt.string,
+ preventBodyScroll: pt.boolean,
+ unstable_popperModifiers: pt.arrayOf(
+ pt.shape({
+ name: pt.string,
+ options: pt.shape({
+ offset: pt.func,
+ }),
+ })
+ ),
+ }),
+};
+
+const ActionsMenuItem = ({
+ actionIndex,
+ actionName,
+ content,
+ isLabeled,
+ menu,
+ ...rest
+}) => {
+ const { onAction, record } = useContext(ModuleContext);
+
+ // FDS-137: use action name for button name if no content is specified
+ const buttonText = content || rest.name;
+ const key = `action.${actionIndex}-${rest.name}.${content}`;
+
+ const handleMenuItemClick = useCallback(() => {
+ menu.hide();
+
+ if (onAction) {
+ onAction({ actionName, content, isLabeled, ...rest }, record);
+ }
+ }, [actionName, content, isLabeled, menu, onAction, record, rest]);
+
+ return (
+
+ {buttonText}
+
+ );
+};
+
+ActionsMenuItem.propTypes = propTypes;
+
+export default ActionsMenuItem;
diff --git a/packages/cascara/src/ui/Button/Button.fixture.js b/packages/cascara/src/ui/Button/Button.fixture.js
index 7a46b3ddb..b26f0e6fb 100644
--- a/packages/cascara/src/ui/Button/Button.fixture.js
+++ b/packages/cascara/src/ui/Button/Button.fixture.js
@@ -1,4 +1,4 @@
-import React, { useRef } from 'react';
+import React, { useCallback, useRef } from 'react';
import { Button } from '../../../src';
const handleAlert = () => alert('Alerted!');
@@ -6,24 +6,21 @@ const handleAlert = () => alert('Alerted!');
const ButtonRef = () => {
const buttonRef = useRef(null);
- const handleRefLog = () => {
+ const handleRefLog = useCallback(() => {
console.log(buttonRef);
alert('See console for log...');
- };
+ }, []);
- return (
- handleRefLog()} ref={buttonRef} />
- );
+ return ;
};
-/* eslint-disable sort-keys */
export default {
all: (
handleAlert()}
+ onClick={handleAlert}
outcome='positive'
/>
),
@@ -31,14 +28,15 @@ export default {
fluid: (
- Hello
+
+ Hello
+
),
- positive: ,
- negative: ,
link: (
),
+ negative: ,
+ positive: ,
ref: ,
};
-/* eslint-enable sort-keys */
diff --git a/packages/cascara/src/ui/Chat/Chat.js b/packages/cascara/src/ui/Chat/Chat.js
index c971688e2..8616f9219 100644
--- a/packages/cascara/src/ui/Chat/Chat.js
+++ b/packages/cascara/src/ui/Chat/Chat.js
@@ -84,7 +84,7 @@ const Chat = ({ sessionUserID, messages, users }) => {
const isTranslated = Boolean(msg.isTranslated); // This can probably get cleaned up later.
// Only return if we have a defined component for this type
- return Boolean(getMessageObject)
+ return getMessageObject
? getMessageObject({
attached: getMessageGroup(msg, previousMessage, nextMessage),
handleScrollToBottom,
diff --git a/packages/cascara/src/ui/Chat/ChatAttachment.js b/packages/cascara/src/ui/Chat/ChatAttachment.js
index dce432d28..3e8c99b4e 100644
--- a/packages/cascara/src/ui/Chat/ChatAttachment.js
+++ b/packages/cascara/src/ui/Chat/ChatAttachment.js
@@ -17,7 +17,13 @@ const propTypes = {
handleDownloadAttachment: pt.func.isRequired,
handleScrollToBottom: pt.func.isRequired,
isSessionUser: pt.bool,
- metadata: pt.object.isRequired,
+ metadata: pt.shape({
+ height: pt.number,
+ size: pt.oneOf([pt.number, pt.string]),
+ type: pt.string,
+ url: pt.string,
+ width: pt.number,
+ }).isRequired,
timestamp: pt.string.isRequired,
};
diff --git a/packages/cascara/src/ui/Chat/ChatAvatar.js b/packages/cascara/src/ui/Chat/ChatAvatar.js
index 4a86d5c41..2410face5 100644
--- a/packages/cascara/src/ui/Chat/ChatAvatar.js
+++ b/packages/cascara/src/ui/Chat/ChatAvatar.js
@@ -6,7 +6,21 @@ const propTypes = {
fullName: pt.string,
imageUrl: pt.string,
square: pt.bool,
- status: pt.object,
+ status: pt.shape({
+ accessibility: pt.string,
+ color: pt.string,
+ icon: pt.oneOf(['success', 'info', 'warning', 'error', 'unknown']),
+ size: pt.oneOf([
+ 'smallest',
+ 'smaller',
+ 'small',
+ 'medium',
+ 'large',
+ 'larger',
+ 'largest',
+ ]),
+ state: pt.oneOf(['success', 'info', 'warning', 'error', 'unknown']),
+ }),
userID: pt.number,
};
diff --git a/packages/cascara/src/ui/Chat/ChatOptions.js b/packages/cascara/src/ui/Chat/ChatOptions.js
index 8bffe50d7..6ceb497f0 100644
--- a/packages/cascara/src/ui/Chat/ChatOptions.js
+++ b/packages/cascara/src/ui/Chat/ChatOptions.js
@@ -1,11 +1,11 @@
-import React from 'react';
+import React, { useCallback } from 'react';
import pt from 'prop-types';
import {
Animation,
Button,
Dropdown,
- Chat as FUIChat,
Flex,
+ Chat as FUIChat,
Ref,
} from '@fluentui/react-northstar';
import { getChatMessageObj } from './ChatMessage';
@@ -30,33 +30,39 @@ const ChatOptions = ({
isSessionUser = false,
options = [],
timestamp,
-}) => (
-
- 3 ? (
- value.content}
- items={options.map((option, i) => ({
- ...option,
- }))}
- noResultsMessage="We couldn't find any matches."
- placeholder='Select an option...'
- />
- ) : (
-
- {options.map((option) => (
-
- ))}
-
- )
- }
- mine={isSessionUser}
- timestamp={timestamp}
- />
-
-);
+}) => {
+ const itemToString = useCallback((value) => {
+ return value.content;
+ }, []);
+
+ return (
+
+ 3 ? (
+ ({
+ ...option,
+ }))}
+ noResultsMessage="We couldn't find any matches."
+ placeholder='Select an option...'
+ />
+ ) : (
+
+ {options.map((option) => (
+
+ ))}
+
+ )
+ }
+ mine={isSessionUser}
+ timestamp={timestamp}
+ />
+
+ );
+};
ChatOptions.displayName = 'Chat.Options';
ChatOptions.propTypes = propTypes;
@@ -81,7 +87,7 @@ const getChatOptionsObj = (obj) => {
getChatMessageObj(obj),
{
...getSharedMessageKeys(obj),
- key: message.id + '_buttons',
+ key: `${message.id}_buttons`,
message: (
[
] {
const [theme, setTheme] = useState(items[DEFAULT_THEME_INDEX].value);
+ const handleDropdownChange = useCallback(
+ (e, data) => {
+ setTheme(data.value.value);
+ },
+ [setTheme]
+ );
+
return (
@@ -76,7 +90,7 @@ const ChatProvider = ({ children, inputComponent, isThemeSelectable }) => {
items={items.map((option) => ({
...option,
}))}
- onChange={(e, data) => setTheme(data.value.value)}
+ onChange={handleDropdownChange}
placeholder='Select a theme'
/>
@@ -90,4 +104,6 @@ const ChatProvider = ({ children, inputComponent, isThemeSelectable }) => {
);
};
+ChatProvider.propTypes = propTypes;
+
export default ChatProvider;
diff --git a/packages/cascara/src/ui/Chat/ChatTyping.js b/packages/cascara/src/ui/Chat/ChatTyping.js
index ed32b3617..ffada89e2 100644
--- a/packages/cascara/src/ui/Chat/ChatTyping.js
+++ b/packages/cascara/src/ui/Chat/ChatTyping.js
@@ -15,36 +15,35 @@ const propTypes = {
isSessionUser: pt.bool,
};
-/** A Chat can display an indicator that typing is happening */
-const ChatTyping = ({ isSessionUser = false }) => {
- return (
-
-
-
- ({
- color: siteVariables?.colorScheme?.brand?.foreground,
- })}
- />
-
-
- }
- mine={isSessionUser}
- style={{ minWidth: 'auto' }}
- />
-
- );
+const handleMoreIconClick = ({ theme: { siteVariables } }) => {
+ return {
+ color: siteVariables?.colorScheme?.brand?.foreground,
+ };
};
+/** A Chat can display an indicator that typing is happening */
+const ChatTyping = ({ isSessionUser = false }) => (
+
+
+
+
+
+
+ }
+ mine={isSessionUser}
+ style={{ minWidth: 'auto' }}
+ />
+
+);
+
ChatTyping.displayName = 'Chat.Typing';
ChatTyping.propTypes = propTypes;
diff --git a/packages/cascara/src/ui/Chat/ChatWidget/TicketResolved.js b/packages/cascara/src/ui/Chat/ChatWidget/TicketResolved.js
index 10eac4b06..8ccb1a2c9 100644
--- a/packages/cascara/src/ui/Chat/ChatWidget/TicketResolved.js
+++ b/packages/cascara/src/ui/Chat/ChatWidget/TicketResolved.js
@@ -1,4 +1,6 @@
import React, { useState } from 'react';
+import pt from 'prop-types';
+
import { Card, Flex, RadioGroup, Text } from '@fluentui/react-northstar';
import ChatAvatar from '../ChatAvatar';
@@ -20,7 +22,10 @@ const SURVEY_OPTIONS = [
},
];
-const propTypes = {};
+const propTypes = {
+ // eslint-disable-next-line react/forbid-prop-types -- We do not know what the object params might be in this case
+ value: pt.object,
+};
const TicketResolved = () => {
const [surveyResponse, setSurveyResponse] = useState();
diff --git a/packages/cascara/src/ui/Chat/ChatWidget/index.js b/packages/cascara/src/ui/Chat/ChatWidget/index.js
index 398f47faf..0cfd50ea4 100644
--- a/packages/cascara/src/ui/Chat/ChatWidget/index.js
+++ b/packages/cascara/src/ui/Chat/ChatWidget/index.js
@@ -33,7 +33,7 @@ const getChatWidgetObj = (obj) => {
// This message may need to be separated to throw errors on other components like
// system type messages
if (message.user_id !== (undefined || null)) {
- // eslint-disable-next-line no-console
+ // eslint-disable-next-line no-console -- this is needed as a developer message
console.error('System widgets should not include a `user_id` key.');
}
return {
diff --git a/packages/cascara/src/ui/Chat/fixtures/ChatPublicAPI.fixture.js b/packages/cascara/src/ui/Chat/fixtures/ChatPublicAPI.fixture.js
index 8586b5d49..778cbb6d6 100644
--- a/packages/cascara/src/ui/Chat/fixtures/ChatPublicAPI.fixture.js
+++ b/packages/cascara/src/ui/Chat/fixtures/ChatPublicAPI.fixture.js
@@ -4,14 +4,13 @@ import {
Button,
Flex,
Provider,
- TextArea,
teamsTheme,
+ TextArea,
} from '@fluentui/react-northstar';
import { getNormalizedMessages } from './utils';
import { results as convo0 } from '../json/conversation0';
import { results as convo1 } from '../json/conversation1';
-// import { results as convo2 } from '../json/conversation2';
const teamsCommentsTheme = {
componentStyles: {
@@ -105,11 +104,9 @@ const TeamsChatExample = (
);
-/* eslint-disable sort-keys */
export default {
default: ChatPublicAPI,
- no_users: ChatNoUsers,
no_messages: ChatNoMessages,
+ no_users: ChatNoUsers,
teams: TeamsChatExample,
};
-/* eslint-enable sort-keys */
diff --git a/packages/cascara/src/ui/Chat/fixtures/utils/currentPlatform.js b/packages/cascara/src/ui/Chat/fixtures/utils/currentPlatform.js
index e60bb8f63..00e361554 100644
--- a/packages/cascara/src/ui/Chat/fixtures/utils/currentPlatform.js
+++ b/packages/cascara/src/ui/Chat/fixtures/utils/currentPlatform.js
@@ -1,21 +1,21 @@
const platforms = {
- cordova: Boolean(window.hasOwnProperty('cordova')),
+ cordova: Boolean(Object.prototype.hasOwnProperty.call(window, 'cordova')),
electron: Boolean(process.versions['electron']),
};
-const getCurrentPlatform = () => {
+function getCurrentPlatform() {
+ // If we do not match any other platform, set `web` as our platform
+ let finalPlatform = 'web';
+
for (const platform in platforms) {
if (platforms[platform]) {
// Once we match a platform we return and do not test any other platforms,
// so the order of the `platforms` object is potentially important.
- return platform;
- } else {
- // If we do not match any other platform, set `web` as our platform
- return 'web';
+ finalPlatform = platform;
}
}
-};
-const currentPlatform = getCurrentPlatform();
+ return finalPlatform;
+}
-export { currentPlatform };
+export const currentPlatform = getCurrentPlatform();
diff --git a/packages/cascara/src/ui/Chat/utils/bytesToSize.js b/packages/cascara/src/ui/Chat/utils/bytesToSize.js
index 5a172a227..62523def4 100644
--- a/packages/cascara/src/ui/Chat/utils/bytesToSize.js
+++ b/packages/cascara/src/ui/Chat/utils/bytesToSize.js
@@ -2,7 +2,7 @@ const bytesToSize = (bytes) => {
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
const int = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
return bytes
- ? Math.round(bytes / Math.pow(1024, int), 2) + ' ' + sizes[int]
+ ? `${Math.round(bytes / Math.pow(1024, int), 2)} ${sizes[int]}`
: null;
};
diff --git a/packages/cascara/src/ui/Chat/utils/getMessageGroup.js b/packages/cascara/src/ui/Chat/utils/getMessageGroup.js
index 9e74f7be8..f1c1130fb 100644
--- a/packages/cascara/src/ui/Chat/utils/getMessageGroup.js
+++ b/packages/cascara/src/ui/Chat/utils/getMessageGroup.js
@@ -12,12 +12,10 @@ const getMessageGroup = (
const { sys_date_created: previousUTC, user_id: previousUser } = previous;
const { sys_date_created: nextUTC, user_id: nextUser } = next;
- /* eslint-disable sort-keys */
-
const time = {
- prev: new Date(previousUTC).getTime(),
current: new Date(currentUTC).getTime(),
next: new Date(nextUTC).getTime(),
+ prev: new Date(previousUTC).getTime(),
};
const timeDiffMins = 15;
const prevMinDiff = Math.floor((time.current - time.prev) / 1000 / 60);
@@ -25,14 +23,14 @@ const getMessageGroup = (
// Messages can be grouped in two scenarios:
const userGroup = {
- top: previousUser !== currentUser && nextUser === currentUser,
- middle: previousUser === currentUser && nextUser === currentUser,
bottom: nextUser !== currentUser && previousUser === currentUser,
+ middle: previousUser === currentUser && nextUser === currentUser,
+ top: previousUser !== currentUser && nextUser === currentUser,
};
const timeRangeGroup = {
- top: previousUser === currentUser && prevMinDiff > timeDiffMins,
- middle: prevMinDiff < timeDiffMins && nextMinDiff < timeDiffMins,
bottom: nextUser === currentUser && nextMinDiff > timeDiffMins,
+ middle: prevMinDiff < timeDiffMins && nextMinDiff < timeDiffMins,
+ top: previousUser === currentUser && prevMinDiff > timeDiffMins,
};
let messageGrouping;
@@ -63,8 +61,6 @@ const getMessageGroup = (
// attachment,
// });
- /* eslint-enable sort-keys */
-
// Any message not in a group should not have any messageGrouping (return undefined)
return messageGrouping;
};
diff --git a/packages/cascara/src/ui/Checkbox/Checkbox.js b/packages/cascara/src/ui/Checkbox/Checkbox.js
index e9a9f713e..607da1760 100644
--- a/packages/cascara/src/ui/Checkbox/Checkbox.js
+++ b/packages/cascara/src/ui/Checkbox/Checkbox.js
@@ -1,4 +1,12 @@
import React, { useEffect, useRef } from 'react';
+import pt from 'prop-types';
+
+const propTypes = {
+ checked: pt.bool,
+ indeterminate: pt.bool,
+ name: pt.string,
+ onChange: pt.func,
+};
const Checkbox = ({
checked = false,
@@ -33,4 +41,6 @@ const Checkbox = ({
);
};
+Checkbox.propTypes = propTypes;
+
export default Checkbox;
diff --git a/packages/cascara/src/ui/Dashboard/poc/DashboardPAC.fixture.js b/packages/cascara/src/ui/Dashboard/poc/DashboardPAC.fixture.js
index 9db3c8718..b1aef3088 100644
--- a/packages/cascara/src/ui/Dashboard/poc/DashboardPAC.fixture.js
+++ b/packages/cascara/src/ui/Dashboard/poc/DashboardPAC.fixture.js
@@ -1,4 +1,3 @@
-/* eslint-disable react/no-multi-comp */
import React from 'react';
import { Container } from 'semantic-ui-react';
import Dashboard from '../Dashboard';
diff --git a/packages/cascara/src/ui/Dashboard/widgets/Widget.js b/packages/cascara/src/ui/Dashboard/widgets/Widget.js
index 0055544d2..5d8684273 100644
--- a/packages/cascara/src/ui/Dashboard/widgets/Widget.js
+++ b/packages/cascara/src/ui/Dashboard/widgets/Widget.js
@@ -6,7 +6,14 @@ import styles from '../Dashboard.module.scss';
const propTypes = {
/** A widget can display action buttons */
- actions: pt.array,
+ actions: pt.arrayOf(
+ pt.shape({
+ content: pt.string,
+ })
+ ),
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ /** aWidget can have a css class name */
+ className: pt.string,
/** A widget can have a clickable info icon with a description */
description: pt.string,
/** The height of a widget */
diff --git a/packages/cascara/src/ui/Dashboard/widgets/WidgetBar.js b/packages/cascara/src/ui/Dashboard/widgets/WidgetBar.js
index d8761f992..647becb28 100644
--- a/packages/cascara/src/ui/Dashboard/widgets/WidgetBar.js
+++ b/packages/cascara/src/ui/Dashboard/widgets/WidgetBar.js
@@ -15,7 +15,7 @@ const propTypes = {
/** The unique value to index by on `data` */
indexBy: pt.string,
/** Values to show from `data` */
- keys: pt.array,
+ keys: pt.arrayOf(pt.shape({})),
/** The value to use for displaying bar labels */
label: pt.string,
/** Direction to orient the bar */
diff --git a/packages/cascara/src/ui/Dashboard/widgets/WidgetError.js b/packages/cascara/src/ui/Dashboard/widgets/WidgetError.js
index 1961a8c3f..d8adc90ed 100644
--- a/packages/cascara/src/ui/Dashboard/widgets/WidgetError.js
+++ b/packages/cascara/src/ui/Dashboard/widgets/WidgetError.js
@@ -1,6 +1,12 @@
import React from 'react';
+import pt from 'prop-types';
+
import styles from '../Dashboard.module.scss';
+const propTypes = {
+ message: pt.string,
+};
+
const WidgetError = ({ message }) => {
return (
@@ -10,4 +16,6 @@ const WidgetError = ({ message }) => {
);
};
+WidgetError.propTypes = propTypes;
+
export default WidgetError;
diff --git a/packages/cascara/src/ui/Dashboard/widgets/WidgetGeoMap.js b/packages/cascara/src/ui/Dashboard/widgets/WidgetGeoMap.js
index 3d973e32c..b1a0df659 100644
--- a/packages/cascara/src/ui/Dashboard/widgets/WidgetGeoMap.js
+++ b/packages/cascara/src/ui/Dashboard/widgets/WidgetGeoMap.js
@@ -15,10 +15,7 @@ const propTypes = {
* Widget for @nivo/geo (Chloropleth).
*/
const WidgetGeoMap = ({ data, ...rest }) => {
- const largestValue = Math.max.apply(
- Math,
- data.map((object) => object.value)
- );
+ const largestValue = Math.max(...data.map((object) => object.value));
const CHART_CONFIG = {
...CHART_DEFAULTS,
diff --git a/packages/cascara/src/ui/Dashboard/widgets/WidgetStatsStat.js b/packages/cascara/src/ui/Dashboard/widgets/WidgetStatsStat.js
index 7ac39f4c7..60bcaaaca 100644
--- a/packages/cascara/src/ui/Dashboard/widgets/WidgetStatsStat.js
+++ b/packages/cascara/src/ui/Dashboard/widgets/WidgetStatsStat.js
@@ -1,7 +1,16 @@
import React, { useCallback } from 'react';
+import pt from 'prop-types';
+
import { Clickable } from 'reakit';
import styles from '../Dashboard.module.scss';
+const propTypes = {
+ label: pt.string,
+ onClick: pt.func,
+ sub: pt.oneOf([pt.number, pt.string]),
+ value: pt.oneOf([pt.number, pt.string]),
+};
+
const WidgetStatsStat = ({ onClick, label, value, sub }) => {
// Instead of maintaining separate, competing styles for focus, we are setting focus on this clickable item on hover. This may be something we consider doing on other Clickable components with Reakit.
const handleFocus = useCallback(({ currentTarget, dispatchConfig }) => {
@@ -17,8 +26,8 @@ const WidgetStatsStat = ({ onClick, label, value, sub }) => {
return (
{
};
WidgetStatsStat.displayName = 'stats.stat';
+WidgetStatsStat.propTypes = propTypes;
export default WidgetStatsStat;
diff --git a/packages/cascara/src/ui/Form/context/FormProvider.js b/packages/cascara/src/ui/Form/context/FormProvider.js
index 6f4942b80..53d9bd23a 100644
--- a/packages/cascara/src/ui/Form/context/FormProvider.js
+++ b/packages/cascara/src/ui/Form/context/FormProvider.js
@@ -1,14 +1,21 @@
import React from 'react';
-import { ModuleContext, ModuleProvider } from '../../../modules/context';
+import pt from 'prop-types';
import { useForm } from 'react-hook-form';
+import { ModuleContext, ModuleProvider } from '../../../modules/context';
+
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ // eslint-disable-next-line react/forbid-prop-types -- We do not know what the object params might be in this case
+ value: pt.object,
+};
+
const FormProvider = ({ children, value, ...props }) => {
const formMethods = useForm();
const { handleSubmit } = formMethods;
const onSubmit = (data) => {
- // eslint-disable-next-line no-console
- console.table(data);
+ return data;
};
const mergedValues = {
@@ -24,4 +31,6 @@ const FormProvider = ({ children, value, ...props }) => {
);
};
+FormProvider.propTypes = propTypes;
+
export default FormProvider;
diff --git a/packages/cascara/src/ui/Form/poc/FormPublicAPI.fixture.js b/packages/cascara/src/ui/Form/poc/FormPublicAPI.fixture.js
index 50dc52185..5c277ddf7 100644
--- a/packages/cascara/src/ui/Form/poc/FormPublicAPI.fixture.js
+++ b/packages/cascara/src/ui/Form/poc/FormPublicAPI.fixture.js
@@ -1,4 +1,3 @@
-/* eslint-disable react/no-multi-comp */
import React from 'react';
import faker from 'faker';
import JsonPlaceholder from '../../../placeholders/JsonPlaceholder';
@@ -105,7 +104,7 @@ const prepareFormData = (data, config) => {
}
});
- const actions = dataConfig.actions;
+ const { actions } = dataConfig;
return {
actions,
@@ -200,7 +199,9 @@ const FormPublicAPI = ({ data, dataConfig }) => {
})}
{prepareFormData(data, dataConfig).actions.map((action, i) => (
- {action.label}
+
+ {action.label}
+
))}
diff --git a/packages/cascara/src/ui/InfoPopover/InfoPopover.js b/packages/cascara/src/ui/InfoPopover/InfoPopover.js
index 35e95ee4f..43903f3f2 100644
--- a/packages/cascara/src/ui/InfoPopover/InfoPopover.js
+++ b/packages/cascara/src/ui/InfoPopover/InfoPopover.js
@@ -1,12 +1,14 @@
import React from 'react';
+import pt from 'prop-types';
+import { Popover, PopoverDisclosure, usePopoverState } from 'reakit/Popover';
+
import styles from './InfoPopover.module.scss';
-import {
- Popover,
- // PopoverArrow,
- PopoverDisclosure,
- usePopoverState,
-} from 'reakit/Popover';
+const propTypes = {
+ message: pt.string,
+ // eslint-disable-next-line react/forbid-prop-types -- We do not know what the object params might be in this case
+ style: pt.object,
+};
const InfoPopover = ({ message, style }) => {
const popover = usePopoverState({
@@ -18,7 +20,7 @@ const InfoPopover = ({ message, style }) => {
<>
@@ -35,4 +37,6 @@ const InfoPopover = ({ message, style }) => {
);
};
+InfoPopover.propTypes = propTypes;
+
export default InfoPopover;
diff --git a/packages/cascara/src/ui/Pagination/Pagination.js b/packages/cascara/src/ui/Pagination/Pagination.js
index f1222ccd8..9e7965f92 100644
--- a/packages/cascara/src/ui/Pagination/Pagination.js
+++ b/packages/cascara/src/ui/Pagination/Pagination.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useCallback } from 'react';
import pt from 'prop-types';
import classNames from 'classnames/bind';
import { noop } from 'lodash';
@@ -11,6 +11,7 @@ const cx = classNames.bind(styles);
const propTypes = {
/** Can render as a different tag or component */
as: pt.oneOfType([pt.string, pt.node]),
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
/** current page */
currentPage: pt.number,
/** entity name in plural form */
@@ -23,6 +24,8 @@ const propTypes = {
itemsPerPageLimit: pt.number,
/** a message to be displayed when no items to display */
notFoundMessage: pt.string,
+ /** a function to handle pagination changes */
+ onPaginationChange: pt.func,
/** the items collection length */
recordCount: pt.number,
};
@@ -40,62 +43,68 @@ const Pagination = ({
currentPage = 1,
...rest
}) => {
- /**
- * Handles pagination changes
- *
- * This function updates the pagination values
- * and invokes upstream logic to handle the change.
- *
- * @param {Event} _ Usually the click event
- * @param {Object} component Component object passed by SUIR
- * @param {String} component.name The name of the component
- * @param {Any} component.value The new value in the component */
- const handlePaginationChange = (_, component) => {
- let newPage = currentPage;
- let newitemsPerPageLimit = itemsPerPageLimit;
+ //
+ // Handles pagination changes
+ //
+ // This function updates the pagination values
+ // and invokes upstream logic to handle the change.
+ //
+ // @param {Event} _ Usually the click event
+ // @param {Object} component Component object passed by SUIR
+ // @param {String} component.name The name of the component
+ // @param {Any} component.value The new value in the component
+ const handlePaginationChange = useCallback(
+ (_, component) => {
+ let newPage = currentPage;
+ let newitemsPerPageLimit = itemsPerPageLimit;
- if (component.name === 'page') {
- newPage = component.value;
- }
+ if (component.name === 'page') {
+ newPage = component.value;
+ }
- if (component.name === 'itemsPerPageLimit') {
- newitemsPerPageLimit = component.value;
+ if (component.name === 'itemsPerPageLimit') {
+ newitemsPerPageLimit = component.value;
- // safeguard
- if (newitemsPerPageLimit >= recordCount) {
- newPage = 1;
+ // safeguard
+ if (newitemsPerPageLimit >= recordCount) {
+ newPage = 1;
+ }
}
- }
- onPaginationChange({
- limit: newitemsPerPageLimit,
- page: newPage,
- });
- };
+ onPaginationChange({
+ limit: newitemsPerPageLimit,
+ page: newPage,
+ });
+ },
+ [currentPage, itemsPerPageLimit, onPaginationChange, recordCount]
+ );
- /**
- * Handles button's click event
- *
- * This handler decides wether to increase or decrease page
- * based on button name. It acts as a proxy for `handlePaginationChange`
- *
- * @param {Event} _ Usually the click event
- * @param {Object} component Component object passed by SUIR
- * @param {String} component.name The name of the component */
- const handleButtonClick = (_, button) => {
- let newPage = currentPage;
+ //
+ // Handles button's click event
+ //
+ // This handler decides wether to increase or decrease page
+ // based on button name. It acts as a proxy for `handlePaginationChange`
+ //
+ // @param {Event} _ Usually the click event
+ // @param {Object} component Component object passed by SUIR
+ // @param {String} component.name The name of the component
+ const handleButtonClick = useCallback(
+ (_, button) => {
+ let newPage = currentPage;
- if (button.name === 'forward') {
- newPage++;
- } else {
- newPage--;
- }
+ if (button.name === 'forward') {
+ newPage++;
+ } else {
+ newPage--;
+ }
- handlePaginationChange(null, {
- name: 'page',
- value: newPage,
- });
- };
+ handlePaginationChange(null, {
+ name: 'page',
+ value: newPage,
+ });
+ },
+ [currentPage, handlePaginationChange]
+ );
const availablePages = Math.ceil(recordCount / itemsPerPageLimit) || 1;
const canGoForward = currentPage < availablePages;
@@ -134,7 +143,6 @@ const Pagination = ({
}));
const itemsPerPageLimitSelect = () => (
- // eslint-disable-next-line jsx-a11y/label-has-for
{`${entityNamePlural} per page:`}
(
- // eslint-disable-next-line jsx-a11y/label-has-for
{'Page '}
);
-/* eslint-disable sort-keys */
-export default { Popover: PopoverFixture, ActionsMenu: ActionsMenuFixture };
-/* eslint-enable sort-keys */
+export default {
+ ActionsMenu: ActionsMenuFixture,
+ Popover: PopoverFixture,
+};
diff --git a/packages/cascara/src/ui/Popover/Popover.js b/packages/cascara/src/ui/Popover/Popover.js
index 1ce69b085..29842bd46 100644
--- a/packages/cascara/src/ui/Popover/Popover.js
+++ b/packages/cascara/src/ui/Popover/Popover.js
@@ -1,14 +1,20 @@
import React, { useRef } from 'react';
+import pt from 'prop-types';
import {
PopoverBackdrop,
PopoverDisclosure,
Popover as ReakitPopover,
usePopoverState,
} from 'reakit/Popover';
-import styles from './Popover.module.scss';
+import styles from './Popover.module.scss';
import { popperOverTrigger } from '../../shared/popperModifiers';
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ trigger: pt.element,
+};
+
const Popover = ({ children, trigger }) => {
// Set a ref on our trigger to pass into the disclosure and also measure clientHeight
const triggerRef = useRef();
@@ -33,4 +39,6 @@ const Popover = ({ children, trigger }) => {
);
};
+Popover.propTypes = propTypes;
+
export default Popover;
diff --git a/packages/cascara/src/ui/Section/Section.fixture.js b/packages/cascara/src/ui/Section/Section.fixture.js
index 6eff9ca4c..77c1f2476 100644
--- a/packages/cascara/src/ui/Section/Section.fixture.js
+++ b/packages/cascara/src/ui/Section/Section.fixture.js
@@ -6,7 +6,7 @@ import Section from './Section';
const sectionHeader = (
-
+
);
@@ -38,7 +38,11 @@ const drySection = (
);
-const trigger = Hello ;
+const trigger = (
+
+ Hello
+
+);
const Fixture = () => (
diff --git a/packages/cascara/src/ui/Section/Section.js b/packages/cascara/src/ui/Section/Section.js
index e842e2837..ca728ca1d 100644
--- a/packages/cascara/src/ui/Section/Section.js
+++ b/packages/cascara/src/ui/Section/Section.js
@@ -1,7 +1,15 @@
import React from 'react';
+import pt from 'prop-types';
+
import styles from './Section.module.scss';
-const Section = ({ header, children, footer }) => {
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ footer: pt.string,
+ header: pt.string,
+};
+
+const Section = ({ children, footer, header }) => {
return (
{header && }
@@ -11,4 +19,6 @@ const Section = ({ header, children, footer }) => {
);
};
+Section.propTypes = propTypes;
+
export default Section;
diff --git a/packages/cascara/src/ui/Table/0-Table.mdx b/packages/cascara/src/ui/Table/0-Table.mdx
index 0e817e4ea..da80fc72c 100644
--- a/packages/cascara/src/ui/Table/0-Table.mdx
+++ b/packages/cascara/src/ui/Table/0-Table.mdx
@@ -38,35 +38,47 @@ const data = {[
]}
```
-## dataConfig
-
-Here you can specify the columns to display as well as the available actions (if any) for each row.
-This is the core of Table's configuration, here you can define:
-
-### actions
+## actions
Actions represent 'verbs' we want to apply to our Table rows, like 'view' to navigate to another page with detailed information about the row.
Another example would be 'Delete' to delete a row. 'actions' will be appended to each row, they'll appear as buttons.
+By defining an 'action', you are telling Table how you want to be notified when your 'action' button is pressed. Via the 'onAction' event.
> Table does not provide the logic to handle 'actions', the implementation for deleting a row, navigating to another page, etc. it's up to you.
-By defining an 'action', you are telling Table how you want to be notified when your 'action' button is pressed. Via the 'onAction' event.
+The shape of `actions` is as follows:
-```javascript
----
-title: The shape of an action
----
-const action = {
- module: 'button', // either button or edit
- name: 'view', // the action name
- content: 'View', // button text
- size: 'small', // button size
-},
+```javasccript
+const actions = {
+ actionButtonMenuIndex: 0,
+ modules: [
+ {
+ module: 'button',
+ name: 'view',
+ content: 'view',
+ },
+ {
+ module: 'edit',
+ cancelLabel: 'Cancelar',
+ editLabel: 'Editar',
+ saveLabel: 'Guardar',
+ },
+ ],
+ resolveRecordActions: (record, actions) => (actionsForRecord),
+}
```
-#### Action modules
+### actionButtonMenuIndex
+
+Tables can become bloated if you use lots of actions, in order to prevent this, the actions are wrapped by an `ActionsMenu`, a contextual menu accessible via the `meatball` button of each row.
-At the moment, we have only two types of modules.
+You can specify which actions are sent to the `ActionsMenu` using the `actionButtonMenuIndex` prop, a number that acts like a partition index that will take your actions array and slice it. The actions whose index is greater or equal to `actionButtonMenuIndex` will be part of `ActionsMenu`, the rest will be displayed as usual.
+
+> This only applies to `button` actions, `edit` actions will always be displayed as usual.
+
+### modules
+
+At the moment, we have only two types of action modules.
- `button`, for simple actions like deleting a row, navigating to another page, etc.
- `edit`, to be used if you want to allow the data to be `editable`.
@@ -80,43 +92,41 @@ In the case of `edit`, the `onAction` event will be emitted up to 3 times as it
All this information is part of the `onAction` event signature, please make sure you review it as well.
-An example set of actions:
+### resolveRecordActions
-```javascript
----
-title: An example set of actions
----
+A function that returns the actions available to the current row.
-const actions: [
+```javasccript
+resolveRecordActions(record, actions) {
+ return actions.reduce((actionsForRecord, action) => {
+ switch (action.name) {
+ case 'edit':
+ // do not show if record is deflected
+ if (!record.deflected) {
+ actionsForRecord.push(action);
+ }
+ break;
- // simple button
- {
- module: 'button',
- name: 'view',
- content: 'view',
- size: 'small',
- },
+ case 'view.faq':
+ // do not show view button for FAQs
+ if (record.type !== 'faq') {
+ actionsForRecord.push(action);
+ }
+ break;
- // or
+ default:
+ actionsForRecord.push(action);
+ }
- // edit button combo (for editable rows)
- {
- module: 'edit',
- size: 'small',
- cancelLabel: 'Cancelar', // you can specify localized labels
- editLabel: 'Editar',
- saveLabel: 'Guardar',
- },
-];
+ return actionsForRecord;
+ }, []);
+};
```
-### actionButtonMenuIndex
-
-Tables can become bloated if you use lots of actions, in order to prevent this, the actions are wrapped by an `ActionsMenu`, a contextual menu accessible via the `meatball` button of each row.
-
-You can specify which actions are sent to the `ActionsMenu` using the `actionButtonMenuIndex` prop, a number that acts like a partition index that will take your actions array and slice it. The actions whose index is greater or equal to `actionButtonMenuIndex` will be part of `ActionsMenu`, the rest will be displayed as usual.
+## dataConfig
-> This only applies to `button` actions, `edit` actions will always be displayed as usual.
+Here you can specify the columns to display as well as the available actions (if any) for each row.
+This is the core of Table's configuration, here you can define:
### display
diff --git a/packages/cascara/src/ui/Table/ActionBar.js b/packages/cascara/src/ui/Table/ActionBar.js
index 8182da970..bc39863ec 100644
--- a/packages/cascara/src/ui/Table/ActionBar.js
+++ b/packages/cascara/src/ui/Table/ActionBar.js
@@ -10,6 +10,7 @@ const propTypes = {
actions: pt.arrayOf(
pt.oneOfType([pt.shape(actionButtonPT), pt.shape(actionEditPT)])
),
+ title: pt.string,
};
const ActionBar = ({ actions = [], title = '' }) => (
diff --git a/packages/cascara/src/ui/Table/ActionBar.test.js b/packages/cascara/src/ui/Table/ActionBar.test.js
index 22a6af52e..cde52564e 100644
--- a/packages/cascara/src/ui/Table/ActionBar.test.js
+++ b/packages/cascara/src/ui/Table/ActionBar.test.js
@@ -9,8 +9,8 @@ const ACTION_MODULES = {
};
describe('ActionBar', () => {
- /**
- * */
+ //
+ //
describe('component tree', () => {
const actions = [
{
@@ -33,9 +33,9 @@ describe('ActionBar', () => {
const { module, ...rest } = action;
const Action = ACTION_MODULES[module];
- /**
- * In certain predefined-action modules in which a label is not required, e.g. `edit`,
- * the following unique key generation fails, as it relies on the label (content). */
+ //
+ // In certain predefined-action modules in which a label is not required, e.g. `edit`,
+ // the following unique key generation fails, as it relies on the label (content).
const key = `${module}.${rest.label || module}`;
return ;
diff --git a/packages/cascara/src/ui/Table/Table.js b/packages/cascara/src/ui/Table/Table.js
index c2efce0ad..5f637483c 100644
--- a/packages/cascara/src/ui/Table/Table.js
+++ b/packages/cascara/src/ui/Table/Table.js
@@ -14,15 +14,31 @@ const actionModuleOptions = Object.keys(actionModules);
const dataModuleOptions = Object.keys(dataModules);
const propTypes = {
- /** An array of objects.
- *
- * Every object in this array will potencially be rendered as a table row. */
+ /** Actions will be appended to each row, they'll appear as buttons. */
+ actions: pt.shape({
+ actionButtonMenuIndex: pt.number,
+
+ modules: pt.arrayOf(
+ pt.shape({
+ module: pt.oneOf(actionModuleOptions).isRequired,
+ })
+ ),
+
+ // Resolve record actions.
+ // A function that returns the actions available to the current row
+ resolveRecordActions: pt.func,
+ }),
+
+ // An array of objects.
+ //
+ // Every object in this array will potencially be rendered as a table row.
data: pt.arrayOf(pt.shape({})),
- /** The main configuration for your table. Here you can specify the columns to display
- * as well as the available actions (if any) for each row. */
+ // The main configuration for your table. Here you can specify the columns to display
+ // as well as the available actions (if any) for each row.
dataConfig: pt.shape({
actionButtonMenuIndex: pt.number,
+
/** Actions will be appended to each row, they'll appear as buttons. */
actions: pt.arrayOf(
pt.shape({
@@ -38,29 +54,59 @@ const propTypes = {
),
}),
- /** Event handler.
- *
- * An event handler you can pass to handle every event your table emits.*/
+ // Event handler.
+ //
+ // An event handler you can pass to handle every event your table emits.
onAction: pt.func,
- /** Unique ID Attribute.
- *
- * specifies the attribute that uniquely identifies every object in the 'data' array. */
+ // Resolve record actions.
+ // A function that returns the actions available to the current row
+ resolveRecordActions: pt.func,
+
+ // Unique ID Attribute.
+ //
+ // specifies the attribute that uniquely identifies every object in the 'data' array.
uniqueIdAttribute: pt.string,
};
/** This is a Table */
const Table = ({
- data = [],
- dataConfig = {},
- onAction = (type, data) => type,
+ actions,
+ data,
+ dataConfig,
+ onAction,
uniqueIdAttribute,
...rest
}) => {
- const { actions = [], display = [] } = dataConfig;
+ const display = dataConfig?.display;
+
+ // // FDS-142: new action props
+ let actionButtonMenuIndex = actions?.actionButtonMenuIndex;
+ let modules = actions?.modules;
+ const resolveRecordActions = actions?.resolveRecordActions;
+
+ // old action props
+ const unwantedActions = dataConfig?.actions;
+ if (unwantedActions) {
+ modules = unwantedActions;
+ // eslint-disable-next-line no-console -- we need to let developers know about this error
+ console.warn(
+ 'Prop "dataConfig.actions" has been deprecated. Actions have been moved to the root of the Table component as their own prop.'
+ );
+ }
+
+ const unwantedActionButtonIndex = dataConfig?.actionButtonMenuIndex;
+ if (unwantedActionButtonIndex) {
+ actionButtonMenuIndex = unwantedActionButtonIndex;
+ // eslint-disable-next-line no-console -- we need to let developers know about this error
+ console.warn(
+ 'Prop "dataConfig.actionButtonIndex" has been deprecated. Actions have been moved to the root of the Table component as their own prop.'
+ );
+ }
+
let columnCount = display.length;
- if (actions.length) {
+ if (modules.length) {
columnCount++;
}
@@ -68,9 +114,12 @@ const Table = ({
{
- /**
- * Component tree
- * This test suite addresses the very basics of testing the Table UI.
- *
- * The first test is the snapshot, nothing special.
- *
- * Table actions
- * An extra column is appended if any or both of these are true:
- *
- * a) at least one `action` is specified in `dataConfig.actions` array
- * b) at least one column in the `dataConfig.display` array is editable
- *
- * In either cases, the extra column displays the action modules.
- *
- * The test `row actions` corresponds to condition a, whilst the test
- * `editable records` addresses condition b. */
+ //
+ // Component tree
+ // This test suite addresses the very basics of testing the Table UI.
+ //
+ // The first test is the snapshot, nothing special.
+ //
+ // Table actions
+ // An extra column is appended if any or both of these are true:
+ //
+ // a) at least one `action` is specified in `dataConfig.actions` array
+ // b) at least one column in the `dataConfig.display` array is editable
+ //
+ // In either cases, the extra column displays the action modules.
+ //
+ // The test `row actions` corresponds to condition a, whilst the test
+ // `editable records` addresses condition b.
describe('component tree', () => {
const whileTheUIisReady = async (miliseconds) =>
await new Promise((resolve) => setTimeout(resolve, miliseconds));
@@ -164,16 +164,16 @@ describe('Table', () => {
expect(view).toMatchSnapshot();
});
- /**
- * The markup generated by the table must match the dataset characteristics.
- *
- * All column definitions in this test suite `dataConfig.display` have a `data-testid`
- * attribute which is used here to do a simple test:
- *
- * Does the number of (found) testIDs match the result of multiplying `datasetSize`
- * by the number of columns in `dataConfig.display`?
- *
- * */
+ //
+ // The markup generated by the table must match the dataset characteristics.
+ //
+ // All column definitions in this test suite `dataConfig.display` have a `data-testid`
+ // attribute which is used here to do a simple test:
+ //
+ // Does the number of (found) testIDs match the result of multiplying `datasetSize`
+ // by the number of columns in `dataConfig.display`?
+ //
+ //
test('table markup vs. dataset', () => {
const { display = [] } = dataConfig;
render(
@@ -208,14 +208,14 @@ describe('Table', () => {
expect(view).toMatchSnapshot();
});
- /**
- * Actions and onAction.
- *
- * When emitted, the `onAction` event contains two arguments, the first
- * one being the element that was clicked, the second is the data of the
- * row that was clicked.
- *
- * This test validates the Actions specified in `dataConfig.actions`. */
+ //
+ // Actions and onAction.
+ //
+ // When emitted, the `onAction` event contains two arguments, the first
+ // one being the element that was clicked, the second is the data of the
+ // row that was clicked.
+ //
+ // This test validates the Actions specified in `dataConfig.actions`.
test('with row actions', () => {
const onAction = jest.fn();
@@ -258,8 +258,8 @@ describe('Table', () => {
);
});
- /**
- * Actions wrapped in an ActionsMenu */
+ //
+ // Actions wrapped in an ActionsMenu
test('it renders no if actionButtonMenuIndex equals button actions number', () => {
const onAction = jest.fn();
@@ -288,8 +288,8 @@ describe('Table', () => {
expect(allMeatBallButtons).toHaveLength(0);
});
- /**
- * Actions wrapped in an ActionsMenu */
+ //
+ // Actions wrapped in an ActionsMenu
test('it renders if actionButtonMenuIndex is less than the button actions number', () => {
const onAction = jest.fn();
@@ -315,18 +315,18 @@ describe('Table', () => {
expect(allMeatBallButtons).toHaveLength(datasetSize);
});
- /**
- * Editable records and onAction.
- *
- * The table emmits certain events depending on the actions taken by the User.
- * In this scenario, the user enters the edit mode, updates the email and clicks the save button.
- *
- * This test validates that:
- *
- * 1.- the events are actualy emitted by the Table
- * 2.- the data reflects the changes made by the user
- * 3.- the number of buttons present in each case. */
- test('editable records', async (done) => {
+ //
+ // Editable records and onAction.
+ //
+ // The table emmits certain events depending on the actions taken by the User.
+ // In this scenario, the user enters the edit mode, updates the email and clicks the save button.
+ //
+ // This test validates that:
+ //
+ // 1.- the events are actualy emitted by the Table
+ // 2.- the data reflects the changes made by the user
+ // 3.- the number of buttons present in each case.
+ test('editable records', async () => {
const testEmail = 'engineering@espressive.com';
const onAction = jest.fn();
@@ -414,20 +414,18 @@ describe('Table', () => {
title: 'District Operations Officer',
})
);
-
- done();
});
- /**
- * Cancelling the edition of a record.
- *
- * Upon exiting the edit mode via the cancel button, the Table must have emitted these events:
- *
- * edit.start - when clicking the edit button
- * edit.cancel - when clicking the cancel button
- *
- * This test validates the events are actualy emitted by the Table, as well
- * as the number of buttons present in each case. */
+ //
+ // Cancelling the edition of a record.
+ //
+ // Upon exiting the edit mode via the cancel button, the Table must have emitted these events:
+ //
+ // edit.start - when clicking the edit button
+ // edit.cancel - when clicking the cancel button
+ //
+ // This test validates the events are actualy emitted by the Table, as well
+ // as the number of buttons present in each case.
test('cancelling record edition', () => {
const onAction = jest.fn();
@@ -518,7 +516,7 @@ describe('Table', () => {
);
});
- // eslint-disable-next-line jest/no-commented-out-tests
+ // eslint-disable-next-line jest/no-commented-out-tests -- @manu todo: FDS-154 - resolve failint negative tests
// test('actions with non-existent module', () => {
// const wrongModuleName = 'Superdooper';
// render(
@@ -548,7 +546,7 @@ describe('Table', () => {
// expect(moduleError).toBeTruthy();
// });
- // eslint-disable-next-line jest/no-commented-out-tests
+ // eslint-disable-next-line jest/no-commented-out-tests -- @manu todo: FDS-154 - resolve failint negative tests
// test('columns with non-existent module', () => {
// const wrongModuleName = 'Superdooper';
// render(
diff --git a/packages/cascara/src/ui/Table/TableRow.js b/packages/cascara/src/ui/Table/TableRow.js
index 302e2dc0e..44997baa6 100644
--- a/packages/cascara/src/ui/Table/TableRow.js
+++ b/packages/cascara/src/ui/Table/TableRow.js
@@ -35,21 +35,26 @@ const propTypes = {
const TableRow = ({ config = {}, record = {} }) => {
const { id, columns } = config;
const {
- dataConfig: { actionButtonMenuIndex = 0, actions: userDefinedActions = [] },
+ resolveRecordActions,
+ actionButtonMenuIndex = 0,
+ modules: userDefinedModules = [],
} = useContext(ModuleContext);
+
+ // FDS-142: If a resolver is passed, get actions from it
+ const actions = resolveRecordActions
+ ? resolveRecordActions(record, userDefinedModules)
+ : userDefinedModules; // otherwise continue as normal
+
const outsideButtonActions = [];
const insideButtonActions = [];
- userDefinedActions
+ actions
.filter(({ module }) => module === 'button')
.map((action, index) =>
index >= actionButtonMenuIndex
? insideButtonActions.push(action)
: outsideButtonActions.push(action)
);
- const specialActions = userDefinedActions.filter(
- ({ module }) => module !== 'button'
- );
-
+ const specialActions = actions.filter(({ module }) => module !== 'button');
const outsideActions = [...specialActions, ...outsideButtonActions];
const renderActionModule = (action, index) => {
@@ -68,10 +73,10 @@ const TableRow = ({ config = {}, record = {} }) => {
);
};
- const actions = (
+ const rowActions = (
{outsideActions.map(renderActionModule)}
- {Boolean(insideButtonActions.length) ? (
+ {insideButtonActions.length ? (
) : null}
@@ -93,8 +98,8 @@ const TableRow = ({ config = {}, record = {} }) => {
);
});
- if (userDefinedActions.length) {
- rowCells.push(actions);
+ if (userDefinedModules.length) {
+ rowCells.push(rowActions);
}
return (
diff --git a/packages/cascara/src/ui/Table/atoms/SelectionToggle.js b/packages/cascara/src/ui/Table/atoms/SelectionToggle.js
index f2cd8bb34..214c62db6 100644
--- a/packages/cascara/src/ui/Table/atoms/SelectionToggle.js
+++ b/packages/cascara/src/ui/Table/atoms/SelectionToggle.js
@@ -1,7 +1,12 @@
-import React, { useContext } from 'react';
+import React, { useCallback, useContext } from 'react';
+import pt from 'prop-types';
import CheckBox from '../../Checkbox';
-import TableContext from '../context';
+import TableContext from '../context/TableContext';
+
+const propTypes = {
+ id: pt.string,
+};
const SelectionToggle = ({ id }) => {
const {
@@ -21,21 +26,24 @@ const SelectionToggle = ({ id }) => {
const checked = id !== '__ALL__' ? selection.includes(id) : someItemsSelected;
const indeterminate = id ? false : !allItemsSelected;
- const handleSelectionToggle = ({ checked, name }) => {
- if (name === '__ALL__') {
- if (checked) {
- selectAll();
- } else {
- clearSelection();
- }
- } else {
- if (selection.includes(name)) {
- removeFromSelection(name);
+ const handleSelectionToggle = useCallback(
+ ({ checked, name }) => {
+ if (name === '__ALL__') {
+ if (checked) {
+ selectAll();
+ } else {
+ clearSelection();
+ }
} else {
- addToSelection(name);
+ if (selection.includes(name)) {
+ removeFromSelection(name);
+ } else {
+ addToSelection(name);
+ }
}
- }
- };
+ },
+ [selectAll, clearSelection, removeFromSelection, addToSelection, selection]
+ );
return (
{
);
};
+SelectionToggle.propTypes = propTypes;
+
export default SelectionToggle;
diff --git a/packages/cascara/src/ui/Table/context/RowContext.js b/packages/cascara/src/ui/Table/context/RowContext.js
index 0f9426804..84890f219 100644
--- a/packages/cascara/src/ui/Table/context/RowContext.js
+++ b/packages/cascara/src/ui/Table/context/RowContext.js
@@ -1,8 +1,20 @@
import React, { useCallback, useMemo, useState } from 'react';
+import pt from 'prop-types';
const TableContext = React.createContext();
-export const TableContextProvider = ({ data, dataConfig, children }) => {
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ data: pt.arrayOf(pt.shape({})),
+ dataConfig: pt.shape({
+ actions: pt.arrayOf(pt.shape({})),
+ bulkActions: pt.arrayOf(pt.shape({})),
+ uniqueIdAttribute: pt.string,
+ }),
+ value: pt.shape({}),
+};
+
+const TableContextProvider = ({ children, data, dataConfig }) => {
const { actions = [], bulkActions = [], uniqueIdAttribute } = dataConfig;
const selectionIsEnabled = bulkActions.length > 0;
@@ -75,4 +87,7 @@ export const TableContextProvider = ({ data, dataConfig, children }) => {
);
};
+TableContextProvider.propTypes = propTypes;
+
+export { TableContextProvider };
export default TableContext;
diff --git a/packages/cascara/src/ui/Table/context/RowProvider.js b/packages/cascara/src/ui/Table/context/RowProvider.js
index 0eb97d975..c6306257d 100644
--- a/packages/cascara/src/ui/Table/context/RowProvider.js
+++ b/packages/cascara/src/ui/Table/context/RowProvider.js
@@ -1,6 +1,15 @@
import React, { useContext } from 'react';
+import pt from 'prop-types';
+
import { ModuleContext, ModuleProvider } from '../../../modules/context';
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ value: pt.shape({
+ record: pt.shape({}),
+ }),
+};
+
const RowProvider = ({ children, value, ...props }) => {
const grandparentValues = useContext(ModuleContext);
@@ -31,4 +40,6 @@ const RowProvider = ({ children, value, ...props }) => {
);
};
+RowProvider.propTypes = propTypes;
+
export default RowProvider;
diff --git a/packages/cascara/src/ui/Table/context/TableContext.js b/packages/cascara/src/ui/Table/context/TableContext.js
index 57c93f7df..a87305db1 100644
--- a/packages/cascara/src/ui/Table/context/TableContext.js
+++ b/packages/cascara/src/ui/Table/context/TableContext.js
@@ -1,8 +1,21 @@
import React, { useCallback, useMemo, useState } from 'react';
+import pt from 'prop-types';
const TableContext = React.createContext();
-export const TableContextProvider = ({
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ data: pt.shape({}),
+ dataConfig: pt.shape({
+ actions: pt.arrayOf(pt.shape({})),
+ bulkActions: pt.arrayOf(pt.shape({})),
+ display: pt.arrayOf(pt.shape({})),
+ uniqueIdAttribute: pt.string,
+ }),
+ onAction: pt.func,
+};
+
+const TableContextProvider = ({
data = [],
dataConfig,
children,
@@ -127,4 +140,7 @@ export const TableContextProvider = ({
);
};
+TableContextProvider.propTypes = propTypes;
+
+export { TableContextProvider };
export default TableContext;
diff --git a/packages/cascara/src/ui/Table/context/TableProvider.js b/packages/cascara/src/ui/Table/context/TableProvider.js
index 54e08cc94..536fc24cf 100644
--- a/packages/cascara/src/ui/Table/context/TableProvider.js
+++ b/packages/cascara/src/ui/Table/context/TableProvider.js
@@ -1,7 +1,14 @@
import React, { useState } from 'react';
-import { ModuleContext, ModuleProvider } from '../../../modules/context';
+import pt from 'prop-types';
import { useForm } from 'react-hook-form';
+import { ModuleContext, ModuleProvider } from '../../../modules/context';
+
+const propTypes = {
+ children: pt.oneOfType([pt.element, pt.arrayOf(pt.element)]),
+ value: pt.shape({}),
+};
+
const TableProvider = ({ children, value, ...props }) => {
const [idOfRecordInEditMode, setIdOfRecordInEditMode] = useState(null);
const formMethods = useForm();
@@ -40,4 +47,6 @@ const TableProvider = ({ children, value, ...props }) => {
);
};
+TableProvider.propTypes = propTypes;
+
export default TableProvider;
diff --git a/packages/cascara/src/ui/Table/fixtures/ActionStack.Table.fixture.js b/packages/cascara/src/ui/Table/fixtures/ActionStack.Table.fixture.js
index 306d53f60..7a3631eb2 100644
--- a/packages/cascara/src/ui/Table/fixtures/ActionStack.Table.fixture.js
+++ b/packages/cascara/src/ui/Table/fixtures/ActionStack.Table.fixture.js
@@ -98,7 +98,6 @@ class Fixture extends PureComponent {
break;
default:
- return;
}
};
diff --git a/packages/cascara/src/ui/Table/fixtures/Conditional.Actions.fixture.js b/packages/cascara/src/ui/Table/fixtures/Conditional.Actions.fixture.js
new file mode 100644
index 000000000..0d3fb8a18
--- /dev/null
+++ b/packages/cascara/src/ui/Table/fixtures/Conditional.Actions.fixture.js
@@ -0,0 +1,221 @@
+import React, { PureComponent } from 'react';
+import { Dropdown, Header } from 'semantic-ui-react';
+
+import JsonPlaceholder from '../../../placeholders/JsonPlaceholder';
+
+import { generateFakeInteractions } from '../../../lib/mock/fakeData';
+import Table from '..';
+
+const defaultColumns = [
+ {
+ attribute: 'created',
+ isEditable: true,
+ isLabeled: false,
+ label: 'Created',
+ module: 'text',
+ },
+ {
+ attribute: 'phrase',
+ isEditable: false,
+ isLabeled: false,
+ label: 'Phrase',
+ module: 'text',
+ },
+ {
+ attribute: 'user',
+ isEditable: true,
+ isLabeled: false,
+ label: 'User',
+ module: 'email',
+ },
+ {
+ attribute: 'response',
+ isEditable: true,
+ isLabeled: false,
+ label: 'Response',
+ module: 'checkbox',
+ },
+ {
+ attribute: 'deflected',
+ isEditable: true,
+ isLabeled: false,
+ label: 'Deflected',
+ module: 'checkbox',
+ },
+ {
+ attribute: 'matchedIntent',
+ isEditable: true,
+ isLabeled: false,
+ label: 'Matched Intent',
+ module: 'text',
+ },
+
+ {
+ attribute: 'type',
+ isEditable: true,
+ isLabeled: false,
+ label: 'Type',
+ module: 'text',
+ },
+];
+
+class Fixture extends PureComponent {
+ state = {
+ columns: [...defaultColumns],
+ data: generateFakeInteractions(50).map((interaction) => ({
+ ...interaction,
+ })),
+ display: [...defaultColumns],
+ };
+
+ handleColumnSelection = (_, { value: selectedColumns }) => {
+ const { columns } = this.state;
+ const newDisplay = columns
+ .filter((column) => selectedColumns.includes(column.attribute))
+ .reverse();
+
+ this.setState({ display: newDisplay });
+ };
+
+ handleRecordUpdate = (record) => {
+ const { data } = this.state;
+
+ const updatedData = data.map((recordInState) => {
+ if (recordInState.eid !== record.eid) {
+ return recordInState;
+ }
+
+ return {
+ ...recordInState,
+ ...record,
+ };
+ });
+
+ this.setState({ data: updatedData });
+ };
+
+ handleTableAction = (caller, data) => {
+ // eslint-ignore-next-line no-console
+ console.log(`Action: '${caller.name}' has been invoked:`);
+ // eslint-ignore-next-line no-console
+ console.table(data);
+
+ switch (caller.name) {
+ case 'edit.save':
+ this.handleRecordUpdate(data);
+ break;
+
+ default:
+ }
+ };
+
+ resolveRecordActions(record, actions) {
+ return actions.reduce((actionsForRecord, action) => {
+ switch (action.name) {
+ //
+ // Idealy, Cascara actions would always go first
+ // because they go outside the ActionsMenu.
+ //
+ // Since that is something we cannot control, we
+ // will have to filter them out inside Cascara.
+ case 'edit':
+ // do not show if record is deflected
+ if (!record.deflected) {
+ actionsForRecord.push(action);
+ }
+ break;
+
+ case 'view.faq':
+ // do not show view button for FAQs
+ if (record.type !== 'faq') {
+ actionsForRecord.push(action);
+ }
+ break;
+
+ default:
+ actionsForRecord.push(action);
+ }
+
+ return actionsForRecord;
+ }, []);
+ }
+
+ render() {
+ const { columns, data, display } = this.state;
+ const dataConfig = {
+ actionButtonMenuIndex: 0,
+ actions: [
+ {
+ content: 'test',
+ module: 'button',
+ name: 'test',
+ },
+ {
+ content: 'stuff',
+ module: 'button',
+ name: 'stuff',
+ },
+ {
+ content: 'okay',
+ module: 'button',
+ name: 'okay',
+ },
+ {
+ content: 'View FAQ',
+ module: 'button',
+ name: 'view.faq',
+ },
+ {
+ module: 'edit',
+ name: 'edit',
+ },
+ ],
+ display,
+ };
+
+ const availableColumns = columns.map((columnDef) => ({
+ key: columnDef.attribute,
+ text: columnDef.content,
+ value: columnDef.attribute,
+ }));
+
+ const selectedColumns = display.map((columnDef) => columnDef.attribute);
+
+ return (
+ <>
+
+
+
+
+ Displaying columns:
+
+
+
+
+
+ >
+ );
+ }
+}
+
+export default Fixture;
diff --git a/packages/cascara/src/ui/Table/fixtures/EdiTable.fixture.js b/packages/cascara/src/ui/Table/fixtures/EdiTable.fixture.js
index 1086e7b38..045ee4570 100644
--- a/packages/cascara/src/ui/Table/fixtures/EdiTable.fixture.js
+++ b/packages/cascara/src/ui/Table/fixtures/EdiTable.fixture.js
@@ -146,7 +146,6 @@ class Fixture extends PureComponent {
break;
default:
- return;
}
};
diff --git a/packages/cascara/src/ui/Table/fixtures/Export.js b/packages/cascara/src/ui/Table/fixtures/Export.js
index c423b6b80..fd0aa69c4 100644
--- a/packages/cascara/src/ui/Table/fixtures/Export.js
+++ b/packages/cascara/src/ui/Table/fixtures/Export.js
@@ -2,7 +2,7 @@ import React, { PureComponent } from 'react';
import { Dropdown, Header } from 'semantic-ui-react';
import './TableStyleTest.module.scss';
-import { generateFakeEmployees } from '../../../lib/mock/generateFakeEmployees';
+import { generateFakeEmployees } from '../../../lib/mock/fakeData';
import Table from '..';
class Fixture extends PureComponent {
@@ -143,7 +143,6 @@ class Fixture extends PureComponent {
break;
default:
- return;
}
};
diff --git a/packages/cascara/src/ui/Table/fixtures/Selection.js b/packages/cascara/src/ui/Table/fixtures/Selection.js
index 52a619780..4a7bce731 100644
--- a/packages/cascara/src/ui/Table/fixtures/Selection.js
+++ b/packages/cascara/src/ui/Table/fixtures/Selection.js
@@ -3,7 +3,7 @@ import React, { useContext } from 'react';
import './TableStyleTest.module.scss';
import { generateFakeEmployees } from '../../../lib/mock/fakeData';
-import TableContext, { TableContextProvider } from '../context';
+import TableContext, { TableContextProvider } from '../context/TableContext';
// import SelectionToggle from '../atoms/SelectionToggle';
const fakeEmployees = generateFakeEmployees(50);
@@ -65,7 +65,9 @@ const Table = () => {
uniqueIdAttribute,
} = useContext(TableContext);
- const columns = dataConfig.display.map((column) => {column.label} );
+ const columns = dataConfig.display.map((column) => (
+ {column.label}
+ ));
if (bulkActions.length) {
columns.push( );
}
@@ -90,7 +92,9 @@ const Table = () => {
}}
>
{bulkActions?.map((action) => (
- {action.label}
+
+ {action.label}
+
))}
@@ -99,16 +103,18 @@ const Table = () => {
// this will have its own context
const renderRow = (row) => (
- {[[] ].concat(
- dataConfig.display.map((column) => (
+ {[[] ].concat(
+ dataConfig.display.map((column, i) => (
{row[column.attribute]}
)),
[
-
+
{actions.map((action) => (
- {action.label}
+
+ {action.label}
+
))}
,
]
diff --git a/packages/cascara/src/ui/Table/fixtures/TableStyleTest.fixure.js b/packages/cascara/src/ui/Table/fixtures/TableStyleTest.fixure.js
index e1e79b9e4..3bbae6755 100644
--- a/packages/cascara/src/ui/Table/fixtures/TableStyleTest.fixure.js
+++ b/packages/cascara/src/ui/Table/fixtures/TableStyleTest.fixure.js
@@ -12,7 +12,7 @@ const fakeRowData = () => ({
});
const tableRow = (count) => {
- let rows = [];
+ const rows = [];
for (let i = 0; i < count; i++) {
// Get new, fake data for each row
const thisRowData = Object.entries(fakeRowData());
diff --git a/rollup.config.js b/rollup.config.js
index 4effaa008..cbe22b7ca 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -13,28 +13,28 @@ const getBabelOptions = ({
babelConfigFile = '../../babel.config.js',
useESModules,
}) => ({
- exclude: '**/node_modules/**',
babelHelpers: 'runtime',
configFile: babelConfigFile,
+ exclude: '**/node_modules/**',
plugins: [['@babel/plugin-transform-runtime', { useESModules }]],
});
// Also making this a function since we may need to move some of the PostCSS config to the package root to be used in Cosmos or Doc tooling.
const getPostCSSOptions = () => ({
// extract: 'styles.css',
- sourceMap: true,
minimize: true,
modules: {
generateScopedName: function (name, filename, css) {
const path = require('path');
- const file = path.basename(filename).split('.')[0];
+ const [file] = path.basename(filename).split('.');
const hash = isDevelopment(process)
? 'DEV_MODE'
: stringHash(css).toString(36).substr(0, 5);
- return '☕️_' + file + '_' + name + '__' + hash;
+ return `☕️_${file}_${name}__${hash}`;
},
},
+ sourceMap: true,
use: ['sass'],
});
@@ -43,7 +43,7 @@ const getPostCSSOptions = () => ({
const external = (id) => !id.startsWith('.') && !id.startsWith('/');
// Pragmatically create a Rollup config for each package
-export const getRollupConfig = ({ pwd, babelConfigFile }) => {
+const getRollupConfig = ({ pwd, babelConfigFile }) => {
const SOURCE_DIR = path.resolve(pwd);
// Get the package.json file
const pkgConfig = require(`${SOURCE_DIR}/package.json`);
@@ -63,12 +63,12 @@ export const getRollupConfig = ({ pwd, babelConfigFile }) => {
// Common JS configuration
const cjsConfig = {
+ external,
input,
output: {
dir: `${SOURCE_DIR}/${pkgConfig.main.replace('/index.js', '')}`,
format: 'cjs',
},
- external,
plugins: [
babel(
getBabelOptions({
@@ -84,12 +84,12 @@ export const getRollupConfig = ({ pwd, babelConfigFile }) => {
// Modules configuration
const esConfig = {
+ external,
input,
output: {
dir: `${SOURCE_DIR}/${pkgConfigModule.replace('/index.js', '')}`,
format: 'es',
},
- external,
plugins: [
babel(
getBabelOptions({
@@ -107,3 +107,5 @@ export const getRollupConfig = ({ pwd, babelConfigFile }) => {
return [cjsConfig, esConfig];
};
+
+export default getRollupConfig;
diff --git a/utils/babel-preset-espressive/package.json b/utils/babel-preset-espressive/package.json
index 81968eb1b..50095f5ca 100644
--- a/utils/babel-preset-espressive/package.json
+++ b/utils/babel-preset-espressive/package.json
@@ -1,26 +1,29 @@
{
"name": "@espressive/babel-preset-espressive",
- "version": "0.2.3",
+ "version": "0.2.5",
"description": "Babel preset used by Espressive",
- "license": "MIT",
"repository": {
- "directory": "utils/babel-preset-espressive",
"type": "git",
- "url": "ssh://git@github.com:Espressive/cascara.git"
- },
- "publishConfig": {
- "access": "public",
- "registry": "https://npm.pkg.github.com/"
+ "url": "ssh://git@github.com:Espressive/cascara.git",
+ "directory": "utils/babel-preset-espressive"
},
+ "license": "MIT",
"files": [
"index.js",
"src"
],
+ "scripts": {
+ "prepare": "echo 'No prepare scripts for this package'"
+ },
"dependencies": {
"@babel/cli": "7.12.1",
"@babel/core": "7.12.3",
"@babel/plugin-proposal-export-default-from": "7.12.1",
"babel-preset-react-app": "9.1.2"
},
+ "publishConfig": {
+ "access": "public",
+ "registry": "https://npm.pkg.github.com/"
+ },
"gitHead": "7b25443adcaa677d9b2a28565ab8a4c0793d65d3"
}
diff --git a/utils/eslint-config-espressive/README.md b/utils/eslint-config-espressive/README.md
deleted file mode 100644
index 9589037f5..000000000
--- a/utils/eslint-config-espressive/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# eslint-config-espressive
-
-Eslint config used by Espressive
-
-## Getting Started
-
-#### Install The Package
-
-This eslint config can be used at the root of a repository (recommended) OR at the root of a monorepo package. It should be added as a `devDependency`. Until this becomes a published package, this needs to be done manually.
-
-```
-"devDependencies": {
- "eslint-config-espressive": "*"
-},
-```
-
-Then run `yarn install`. Note that during the install process, there will be warnings that there are unmet peer dependencies. These dependencies need to be installed at the root of where this config is being added. These can also be added under `devDependencies`. Again, this works best if we run this at the root of a repository.
-
-After installing all peer dependencies, there should be no warnings from this package.
-
-#### Add An Eslint Config
-
-At the root of where eslint is expected to be used, add an `eslint.config.js` file:
-
-```
-module.exports = {
- root: true,
- extends: 'espressive',
-};
-```
-
-This [config could be extended](https://eslint.org/docs/user-guide/configuring) from here, but hopefully that is not needed.
-
-## Future
-
-As of the creation of this file, we are not including the peer dependencies so we can set the dependencies from one location in the repository tree. We might end up later including these dependencies in the package so they do not also need to be added as dependencies wherever eslint is being set up.
diff --git a/utils/eslint-config-espressive/index.js b/utils/eslint-config-espressive/index.js
deleted file mode 100644
index 7eee65cba..000000000
--- a/utils/eslint-config-espressive/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// "off" or 0 - turn the rule off
-// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
-// "error" or 2 - turn the rule on as an error (exit code will be 1)
-
-module.exports = {
- extends: [
- 'eslint-config-react-app',
- './src/base',
- './src/hooks',
- './src/import',
- './src/jest',
- './src/jsx-a11y',
- './src/react',
- ].map(require.resolve),
-};
diff --git a/utils/eslint-config-espressive/package.json b/utils/eslint-config-espressive/package.json
deleted file mode 100644
index f15bc4d02..000000000
--- a/utils/eslint-config-espressive/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "@espressive/eslint-config-espressive",
- "version": "0.2.2",
- "description": "Eslint config used by Espressive",
- "license": "MIT",
- "repository": {
- "directory": "utils/eslint-config-espressive",
- "type": "git",
- "url": "ssh://git@github.com:Espressive/cascara.git"
- },
- "publishConfig": {
- "access": "public",
- "registry": "https://npm.pkg.github.com/"
- },
- "files": [
- "index.js",
- "src"
- ],
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "gitHead": "7b25443adcaa677d9b2a28565ab8a4c0793d65d3"
-}
diff --git a/utils/eslint-config-espressive/src/base.js b/utils/eslint-config-espressive/src/base.js
deleted file mode 100644
index a69ff4087..000000000
--- a/utils/eslint-config-espressive/src/base.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// "off" or 0 - turn the rule off
-// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
-// "error" or 2 - turn the rule on as an error (exit code will be 1)
-
-module.exports = {
- overrides: [
- {
- files: '*.fixture.js',
- rules: {
- 'no-console': 0,
- },
- },
- {
- files: '*.config.js',
- rules: {
- 'sort-keys': 0,
- },
- },
- ],
- rules: {
- 'no-console': 2,
- 'no-unused-vars': 2,
- 'sort-imports': [2, { ignoreDeclarationSort: true }],
- 'sort-keys': 2,
- },
-};
diff --git a/utils/eslint-config-espressive/src/import.js b/utils/eslint-config-espressive/src/import.js
deleted file mode 100644
index 8bea36f77..000000000
--- a/utils/eslint-config-espressive/src/import.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// "off" or 0 - turn the rule off
-// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
-// "error" or 2 - turn the rule on as an error (exit code will be 1)
-
-module.exports = {
- rules: {
- 'import/exports-last': 2,
- 'import/extensions': 2,
- 'import/no-duplicates': 2,
- 'import/no-namespace': 2,
- },
-};
diff --git a/utils/eslint-config-espressive/src/jest.js b/utils/eslint-config-espressive/src/jest.js
deleted file mode 100644
index 8062c2562..000000000
--- a/utils/eslint-config-espressive/src/jest.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// "off" or 0 - turn the rule off
-// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
-// "error" or 2 - turn the rule on as an error (exit code will be 1)
-
-module.exports = {
- env: { 'jest/globals': true },
- plugins: ['jest'],
- rules: {
- 'jest/consistent-test-it': [2, { fn: 'test' }],
- 'jest/lowercase-name': [2, { ignoreTopLevelDescribe: true }],
- 'jest/no-commented-out-tests': 2,
- 'jest/no-deprecated-functions': 2,
- 'jest/no-disabled-tests': 2,
- 'jest/no-focused-tests': 1,
- 'jest/no-identical-title': 2,
- 'jest/no-jasmine-globals': 2,
- 'jest/no-jest-import': 2,
- 'jest/no-large-snapshots': 2,
- 'jest/prefer-to-be-null': 2,
- 'jest/prefer-to-be-undefined': 2,
- 'jest/prefer-to-have-length': 2,
- 'jest/prefer-todo': 2,
- 'jest/require-top-level-describe': 2,
- 'jest/valid-describe': 2,
- 'jest/valid-expect': 2,
- 'jest/valid-expect-in-promise': 2,
- },
-};
diff --git a/utils/eslint-config-espressive/src/jsx-a11y.js b/utils/eslint-config-espressive/src/jsx-a11y.js
deleted file mode 100644
index 3b0983d57..000000000
--- a/utils/eslint-config-espressive/src/jsx-a11y.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// "off" or 0 - turn the rule off
-// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
-// "error" or 2 - turn the rule on as an error (exit code will be 1)
-
-module.exports = {
- extends: 'plugin:jsx-a11y/strict',
- plugins: ['jsx-a11y'],
- rules: {
- 'jsx-a11y/label-has-for': 0,
- },
-};
diff --git a/utils/eslint-config-espressive/src/react.js b/utils/eslint-config-espressive/src/react.js
deleted file mode 100644
index 594940408..000000000
--- a/utils/eslint-config-espressive/src/react.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// "off" or 0 - turn the rule off
-// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
-// "error" or 2 - turn the rule on as an error (exit code will be 1)
-
-module.exports = {
- rules: {
- 'react/boolean-prop-naming': 2,
- 'react/default-props-match-prop-types': 2,
- 'react/destructuring-assignment': 2,
- 'react/jsx-fragments': 2,
- 'react/jsx-no-duplicate-props': 2,
- 'react/jsx-no-useless-fragment': 2,
- 'react/jsx-pascal-case': 2,
- 'react/jsx-sort-default-props': 2,
- 'react/jsx-sort-props': 2,
- 'react/no-children-prop': 2,
- 'react/no-danger': 2,
- 'react/no-find-dom-node': 2,
- 'react/no-multi-comp': 2,
- 'react/no-string-refs': 2,
- 'react/no-this-in-sfc': 2,
- 'react/no-typos': 2,
- 'react/no-unused-prop-types': 2,
- 'react/no-unused-state': 2,
- 'react/prefer-stateless-function': 2,
- 'react/require-render-return': 2,
- 'react/self-closing-comp': 2,
- 'react/sort-prop-types': 2,
- 'react/style-prop-object': 2,
- },
-};
diff --git a/utils/eslint-config/README.md b/utils/eslint-config/README.md
new file mode 100644
index 000000000..3f9cc50b0
--- /dev/null
+++ b/utils/eslint-config/README.md
@@ -0,0 +1,65 @@
+# eslint-config
+
+Eslint config used by Espressive
+
+## Note
+
+This config extends the `eslint-config-react-app` eslint config as a baseline because we use these lint rules on the `eslint-config-react-app` toolchain. There are lint rules in that preset that are requried for code to run and build correctly in a CRA environment.
+
+Our `peerDependencies` should always match the version of `eslint-config-react-app` that we are using: https://github.com/facebook/create-react-app/blob/master/packages/eslint-config-react-app/package.json
+
+Any plugins we are using that are not part of `eslint-config-react-app` should be defined as full `dependencies`
+
+## Getting Started
+
+#### Install The Package
+
+This eslint config can be used at the root of a repository (recommended) OR at the root of a monorepo package. It should be added as a `devDependency`. Until this becomes a published package, this needs to be done manually.
+
+```
+"devDependencies": {
+ "@espressive/eslint-config": "*"
+},
+```
+
+Then run `yarn install`. Note that during the install process, there will be warnings that there are unmet peer dependencies. These dependencies need to be installed at the root of where this config is being added. These can also be added under `devDependencies`. Again, this works best if we run this at the root of a repository.
+
+After installing all peer dependencies, there should be no warnings from this package.
+
+#### Add An Eslint Config
+
+##### Option 1:
+
+Add an "eslintConfig" parameter to the package.json file as an object containing an "extends" parameter:
+
+```
+{
+ "name": "my-library",
+ "version": "9000.0.1",
+ "eslintConfig": {
+ "extends": "@espressive"
+ }
+}
+```
+
+Option 2:
+At the root of where eslint is expected to be used, add an `eslint.config.js` file:
+
+```
+module.exports = {
+ root: true,
+ extends: '@espressive',
+};
+```
+
+### Using With Prettier
+
+As of now, all rules here should not conflict with Prettier. That being said, it is good to also add `eslint-config-prettier` as another preset right after this one so we can potentially disable anything that gets updated.
+
+```
+extends: ['@espressive', 'prettier']
+```
+
+## Other Plugins
+
+There are a number of [other great eslint plugins](https://github.com/dustinspecker/awesome-eslint#plugins) which we may decide to include here at at later date.
diff --git a/utils/eslint-config/package.json b/utils/eslint-config/package.json
new file mode 100644
index 000000000..b69622145
--- /dev/null
+++ b/utils/eslint-config/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "@espressive/eslint-config",
+ "version": "1.0.1",
+ "description": "Eslint config used by Espressive",
+ "repository": {
+ "type": "git",
+ "url": "ssh://git@github.com:Espressive/cascara.git",
+ "directory": "utils/eslint-config"
+ },
+ "license": "MIT",
+ "main": "src/index.js",
+ "files": [
+ "index.js",
+ "src"
+ ],
+ "scripts": {
+ "prepare": "echo 'No prepare scripts for this package'"
+ },
+ "dependencies": {
+ "eslint-config-react-app": "6.0.0",
+ "eslint-plugin-json-format": "2.0.1"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^4.0.0",
+ "@typescript-eslint/parser": "^4.0.0",
+ "babel-eslint": "^10.0.0",
+ "eslint": "^7.5.0",
+ "eslint-plugin-deprecate": "^0.7.0",
+ "eslint-plugin-eslint-comments": "^3.2.0",
+ "eslint-plugin-flowtype": "^5.2.0",
+ "eslint-plugin-import": "^2.22.0",
+ "eslint-plugin-jest": "^24.0.0",
+ "eslint-plugin-jsx-a11y": "^6.4.1",
+ "eslint-plugin-react": "^7.22.0",
+ "eslint-plugin-react-hooks": "^4.0.8",
+ "eslint-plugin-testing-library": "^3.9.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "publishConfig": {
+ "access": "public",
+ "registry": "https://npm.pkg.github.com/"
+ },
+ "gitHead": "7b25443adcaa677d9b2a28565ab8a4c0793d65d3"
+}
diff --git a/utils/eslint-config/src/index.js b/utils/eslint-config/src/index.js
new file mode 100644
index 000000000..376918dff
--- /dev/null
+++ b/utils/eslint-config/src/index.js
@@ -0,0 +1,28 @@
+// "off" or 0 - turn the rule off
+// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
+// "error" or 2 - turn the rule on as an error (exit code will be 1)
+
+module.exports = {
+ extends: [
+ 'react-app',
+ './rules/base',
+ './rules/deprecate',
+ './rules/eslint-comments',
+ './rules/hooks',
+ './rules/import',
+ './rules/jest',
+ './rules/json-format',
+ './rules/jsx-a11y',
+ './rules/react',
+ ],
+ overrides: [
+ {
+ files: ['**/*.fixture.js', '**/*.decorator.js'],
+ rules: {
+ 'import/no-anonymous-default-export': 0,
+ 'no-alert': 0,
+ 'no-console': 0,
+ },
+ },
+ ],
+};
diff --git a/utils/eslint-config/src/rules/base.js b/utils/eslint-config/src/rules/base.js
new file mode 100644
index 000000000..3baafc20c
--- /dev/null
+++ b/utils/eslint-config/src/rules/base.js
@@ -0,0 +1,54 @@
+const { fixtures } = require('../utils/filePaths');
+
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://eslint.org/docs/rules/
+
+module.exports = {
+ extends: ['eslint:recommended'],
+ overrides: [
+ {
+ files: fixtures,
+ rules: {
+ 'no-alert': 0,
+ 'no-console': 0,
+ },
+ },
+ ],
+ rules: {
+ 'consistent-return': 'error',
+ eqeqeq: 'error',
+ 'multiline-comment-style': ['error', 'separate-lines'],
+ 'no-alert': 'error',
+ 'no-console': 'error',
+ 'no-duplicate-imports': 'error',
+ 'no-implicit-coercion': 'error',
+ 'no-undef-init': 'error',
+ 'no-unused-vars': 'error',
+ 'no-use-before-define': 'error',
+ 'no-useless-rename': 'error',
+ 'no-useless-return': 'error',
+ 'no-var': 'error',
+ 'prefer-arrow-callback': 'error',
+ 'prefer-const': 'error',
+ 'prefer-destructuring': 'error',
+ 'prefer-rest-params': 'error',
+ 'prefer-spread': 'error',
+ 'prefer-template': 'error',
+ 'sort-imports': [
+ 'error',
+ {
+ ignoreCase: true,
+ ignoreDeclarationSort: true,
+ },
+ ],
+ 'sort-keys': 'error',
+ 'sort-vars': 'error',
+ strict: ['error', 'never'],
+ 'vars-on-top': 'error',
+ yoda: 'error',
+ },
+};
diff --git a/utils/eslint-config/src/rules/deprecate.js b/utils/eslint-config/src/rules/deprecate.js
new file mode 100644
index 000000000..df2eaed6e
--- /dev/null
+++ b/utils/eslint-config/src/rules/deprecate.js
@@ -0,0 +1,20 @@
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://github.com/AlexMost/eslint-plugin-deprecate
+
+module.exports = {
+ plugins: ['deprecate'],
+ rules: {
+ 'deprecate/import': [
+ 'warn',
+ {
+ name: 'memobind',
+ use: 'the eslint doc suggestions to correctly resolve',
+ },
+ { name: 'fela', use: 'CSS Modules' },
+ ],
+ },
+};
diff --git a/utils/eslint-config/src/rules/eslint-comments.js b/utils/eslint-config/src/rules/eslint-comments.js
new file mode 100644
index 000000000..b9c65bac5
--- /dev/null
+++ b/utils/eslint-config/src/rules/eslint-comments.js
@@ -0,0 +1,17 @@
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://github.com/mysticatea/eslint-plugin-eslint-comments
+
+module.exports = {
+ extends: ['plugin:eslint-comments/recommended'],
+ rules: {
+ 'eslint-comments/no-unused-disable': 'error',
+ 'eslint-comments/require-description': [
+ 'error',
+ { ignore: ['eslint-enable'] },
+ ],
+ },
+};
diff --git a/utils/eslint-config-espressive/src/hooks.js b/utils/eslint-config/src/rules/hooks.js
similarity index 67%
rename from utils/eslint-config-espressive/src/hooks.js
rename to utils/eslint-config/src/rules/hooks.js
index ccd8093d2..22a28bb9e 100644
--- a/utils/eslint-config-espressive/src/hooks.js
+++ b/utils/eslint-config/src/rules/hooks.js
@@ -1,10 +1,7 @@
-// "off" or 0 - turn the rule off
-// "warn" or 1 - turn the rule on as a warning (doesn't affect exit code)
-// "error" or 2 - turn the rule on as an error (exit code will be 1)
-
// As of today, the default rules coming from our extending of `react-scripts`
// defaults are what is recommended for hooks. We may end up wanting to set up
// some advanced rules to check our own custom hooks that have dependencies.
+//
// https://github.com/facebook/react/tree/master/packages/eslint-plugin-react-hooks#advanced-configuration
module.exports = {};
diff --git a/utils/eslint-config/src/rules/import.js b/utils/eslint-config/src/rules/import.js
new file mode 100644
index 000000000..79f27e9cb
--- /dev/null
+++ b/utils/eslint-config/src/rules/import.js
@@ -0,0 +1,22 @@
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://github.com/benmosher/eslint-plugin-import
+
+module.exports = {
+ extends: [
+ 'plugin:import/recommended',
+ 'plugin:import/electron',
+ 'plugin:import/react',
+ ],
+ rules: {
+ 'import/exports-last': 'error',
+ 'import/extensions': 'error',
+ 'import/no-duplicates': 'error', // recommended is warn
+ 'import/no-named-as-default': 'error', // recommended is warn
+ 'import/no-named-as-default-member': 'error', // recommended is warn
+ 'import/no-namespace': 'error',
+ },
+};
diff --git a/utils/eslint-config/src/rules/jest.js b/utils/eslint-config/src/rules/jest.js
new file mode 100644
index 000000000..8ce4580b7
--- /dev/null
+++ b/utils/eslint-config/src/rules/jest.js
@@ -0,0 +1,32 @@
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://github.com/jest-community/eslint-plugin-jest
+
+module.exports = {
+ env: { 'jest/globals': true },
+ extends: ['plugin:jest/recommended'],
+ plugins: ['jest'],
+ rules: {
+ 'jest/consistent-test-it': ['error', { fn: 'test' }],
+ 'jest/lowercase-name': ['error', { ignoreTopLevelDescribe: true }],
+ 'jest/no-commented-out-tests': 'error',
+ 'jest/no-deprecated-functions': 'error',
+ 'jest/no-disabled-tests': 'error',
+ 'jest/no-focused-tests': 1,
+ 'jest/no-identical-title': 'error',
+ 'jest/no-jasmine-globals': 'error',
+ 'jest/no-jest-import': 'error',
+ 'jest/no-large-snapshots': 'error',
+ 'jest/prefer-to-be-null': 'error',
+ 'jest/prefer-to-be-undefined': 'error',
+ 'jest/prefer-to-have-length': 'error',
+ 'jest/prefer-todo': 'error',
+ 'jest/require-top-level-describe': 'error',
+ 'jest/valid-describe': 'error',
+ 'jest/valid-expect': 'error',
+ 'jest/valid-expect-in-promise': 'error',
+ },
+};
diff --git a/utils/eslint-config/src/rules/json-format.js b/utils/eslint-config/src/rules/json-format.js
new file mode 100644
index 000000000..231639cce
--- /dev/null
+++ b/utils/eslint-config/src/rules/json-format.js
@@ -0,0 +1,18 @@
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://github.com/bkucera/eslint-plugin-json-format
+
+module.exports = {
+ overrides: [
+ {
+ files: ['package.json'],
+ settings: {
+ 'json/sort-package-json': 'standard',
+ },
+ },
+ ],
+ plugins: ['json-format'],
+};
diff --git a/utils/eslint-config/src/rules/jsx-a11y.js b/utils/eslint-config/src/rules/jsx-a11y.js
new file mode 100644
index 000000000..039e7989e
--- /dev/null
+++ b/utils/eslint-config/src/rules/jsx-a11y.js
@@ -0,0 +1,15 @@
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://github.com/jsx-eslint/eslint-plugin-jsx-a11y
+
+module.exports = {
+ extends: 'plugin:jsx-a11y/strict',
+ plugins: ['jsx-a11y'],
+ rules: {
+ // Disabling this rule which has been deprecated but is still in the strict set for some reason
+ 'jsx-a11y/label-has-for': 0,
+ },
+};
diff --git a/utils/eslint-config/src/rules/react.js b/utils/eslint-config/src/rules/react.js
new file mode 100644
index 000000000..6d8a270fa
--- /dev/null
+++ b/utils/eslint-config/src/rules/react.js
@@ -0,0 +1,71 @@
+const { fixtures } = require('../utils/filePaths');
+
+// For brevity, we start with the recomended defaults and extend with our own rules.
+// Please make sure we are looking at any rules in the recommended set before adding
+// them below. If we are overriding a recommended rule, we should make a comment for
+// each rule.
+//
+// https://github.com/yannickcr/eslint-plugin-react
+
+module.exports = {
+ extends: ['plugin:react/recommended'],
+ overrides: [
+ {
+ files: fixtures,
+ rules: {
+ 'react/no-multi-comp': 'off',
+ 'react/prop-types': 'off',
+ },
+ },
+ ],
+ rules: {
+ 'react/boolean-prop-naming': 'error',
+ 'react/button-has-type': 'error',
+ 'react/default-props-match-prop-types': 'error',
+ 'react/destructuring-assignment': 'error',
+ 'react/forbid-foreign-prop-types': 'error',
+ 'react/forbid-prop-types': 'error',
+ 'react/function-component-definition': [
+ 'error',
+ {
+ namedComponents: 'arrow-function',
+ unnamedComponents: 'arrow-function',
+ },
+ ],
+ 'react/jsx-boolean-value': 'error',
+ 'react/jsx-fragments': 'error',
+ 'react/jsx-key': 'error',
+ 'react/jsx-no-bind': 'error',
+ 'react/jsx-no-duplicate-props': 'error',
+ 'react/jsx-no-target-blank': 'error',
+ 'react/jsx-no-useless-fragment': 'error',
+ 'react/jsx-pascal-case': 'error',
+ 'react/jsx-sort-default-props': 'error',
+ 'react/jsx-sort-props': 'error',
+ // 'react/jsx-wrap-multilines': ['error', {
+ // "arrow": "parens-new-line",
+ // "assignment": "parens-new-line",
+ // "condition": "ignore",
+ // "declaration": "parens-new-line",
+ // "logical": "ignore",
+ // "prop": "ignore",
+ // "return": "parens-new-line",
+ // }],
+ 'react/no-access-state-in-setstate': 'error',
+ 'react/no-children-prop': 'error',
+ 'react/no-danger': 'error',
+ 'react/no-find-dom-node': 'error',
+ 'react/no-multi-comp': 'error',
+ 'react/no-render-return-value': 'error',
+ 'react/no-string-refs': 'error',
+ 'react/no-this-in-sfc': 'error',
+ 'react/no-typos': 'error',
+ 'react/no-unused-prop-types': 'error',
+ 'react/no-unused-state': 'error',
+ 'react/prefer-stateless-function': 'error',
+ 'react/require-render-return': 'error',
+ 'react/self-closing-comp': 'error',
+ 'react/sort-prop-types': 'error',
+ 'react/style-prop-object': 'error',
+ },
+};
diff --git a/utils/eslint-config/src/utils/filePaths.js b/utils/eslint-config/src/utils/filePaths.js
new file mode 100644
index 000000000..21b92c6fd
--- /dev/null
+++ b/utils/eslint-config/src/utils/filePaths.js
@@ -0,0 +1,5 @@
+// Definitions for unifying ecosystem paths when defining overrides
+
+module.exports = {
+ fixtures: ['**/fixtures/**/*.js', '**/*.fixture.js'],
+};
diff --git a/utils/legacy-css/package.json b/utils/legacy-css/package.json
index 138257178..4c4d6b027 100644
--- a/utils/legacy-css/package.json
+++ b/utils/legacy-css/package.json
@@ -1,20 +1,23 @@
{
"name": "@espressive/legacy-css",
+ "version": "2.0.4",
"description": "Legacy custom compiled CSS for Espressive",
- "version": "2.0.2",
- "main": "src/css/semantic.min.css",
- "license": "MIT",
"repository": {
- "directory": "utils/legacy-css",
"type": "git",
- "url": "ssh://git@github.com:Espressive/cascara.git"
+ "url": "ssh://git@github.com:Espressive/cascara.git",
+ "directory": "utils/legacy-css"
+ },
+ "license": "MIT",
+ "main": "src/css/semantic.min.css",
+ "files": [
+ "src"
+ ],
+ "scripts": {
+ "prepare": "echo 'No prepare scripts for this package'"
},
"publishConfig": {
"access": "public",
"registry": "https://npm.pkg.github.com/"
},
- "files": [
- "src"
- ],
"gitHead": "7b25443adcaa677d9b2a28565ab8a4c0793d65d3"
}
diff --git a/yarn.lock b/yarn.lock
index 59406f9e0..219447efc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1090,6 +1090,14 @@
"@babel/helper-create-regexp-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
+"@babel/polyfill@^7.2.5":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96"
+ integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==
+ dependencies:
+ core-js "^2.6.5"
+ regenerator-runtime "^0.13.4"
+
"@babel/preset-env@7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796"
@@ -1386,6 +1394,13 @@
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.11.2":
+ version "7.13.9"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.9.tgz#97dbe2116e2630c489f22e0656decd60aaa1fcee"
+ integrity sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d"
@@ -1496,27 +1511,24 @@
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
-"@espressive/cascara@file:packages/cascara":
- version "0.2.14-alpha.1"
+"@eslint/eslintrc@^0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
+ integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
dependencies:
- "@babel/runtime" "7.11.2"
- "@nivo/bar" "0.61.0"
- "@nivo/bump" "0.61.0"
- "@nivo/core" "0.61.0"
- "@nivo/geo" "0.61.0"
- "@nivo/heatmap" "0.61.0"
- "@nivo/line" "0.61.0"
- "@nivo/pie" "0.61.0"
- "@nivo/tooltip" "0.61.0"
- "@nivo/treemap" "0.61.0"
- classnames "2.2.6"
- memoize-one "5.1.1"
- react-hook-form "6.8.4"
- react-textarea-autosize "8.2.0"
- reakit next
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
-"@espressive/legacy-css@file:utils/legacy-css":
- version "2.0.1"
+"@espressive/eslint-config@link:./utils/eslint-config":
+ version "0.0.0"
+ uid ""
"@evocateur/libnpmaccess@^3.1.2":
version "3.1.2"
@@ -3163,11 +3175,32 @@
d3-scale "^3.0.0"
recompose "^0.30.0"
+"@nodelib/fs.scandir@2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
+ integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.4"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"
+ integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==
+
"@nodelib/fs.stat@^1.1.2":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"
+ integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.4"
+ fastq "^1.6.0"
+
"@octokit/auth-token@^2.4.0":
version "2.4.4"
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56"
@@ -3175,6 +3208,25 @@
dependencies:
"@octokit/types" "^6.0.0"
+"@octokit/auth-token@^2.4.4":
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3"
+ integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==
+ dependencies:
+ "@octokit/types" "^6.0.3"
+
+"@octokit/core@3.2.5":
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554"
+ integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg==
+ dependencies:
+ "@octokit/auth-token" "^2.4.4"
+ "@octokit/graphql" "^4.5.8"
+ "@octokit/request" "^5.4.12"
+ "@octokit/types" "^6.0.3"
+ before-after-hook "^2.1.0"
+ universal-user-agent "^6.0.0"
+
"@octokit/endpoint@^6.0.1":
version "6.0.10"
resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.10.tgz#741ce1fa2f4fb77ce8ebe0c6eaf5ce63f565f8e8"
@@ -3184,11 +3236,25 @@
is-plain-object "^5.0.0"
universal-user-agent "^6.0.0"
+"@octokit/graphql@^4.5.8":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.0.tgz#f9abca55f82183964a33439d5264674c701c3327"
+ integrity sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ==
+ dependencies:
+ "@octokit/request" "^5.3.0"
+ "@octokit/types" "^6.0.3"
+ universal-user-agent "^6.0.0"
+
"@octokit/openapi-types@^2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.2.0.tgz#123e0438a0bc718ccdac3b5a2e69b3dd00daa85b"
integrity sha512-274lNUDonw10kT8wHg8fCcUc1ZjZHbWv0/TbAwb0ojhBQqZYc1cQ/4yqTVTtPMDeZ//g7xVEYe/s3vURkRghPg==
+"@octokit/openapi-types@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.2.1.tgz#5e846f86104aef96ace20091d8afb6be27979d8a"
+ integrity sha512-Bf7MBvQ1nMpv15ANaQtRBsC7YnwQFPM0eUztp3luQs9L6sBEiQ6ArM1Wx5CG+N7tXETtd0oE0DMcU4wbLlCZIw==
+
"@octokit/plugin-enterprise-rest@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437"
@@ -3246,7 +3312,21 @@
once "^1.4.0"
universal-user-agent "^6.0.0"
-"@octokit/rest@^16.28.4":
+"@octokit/request@^5.3.0", "@octokit/request@^5.4.12":
+ version "5.4.14"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96"
+ integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA==
+ dependencies:
+ "@octokit/endpoint" "^6.0.1"
+ "@octokit/request-error" "^2.0.0"
+ "@octokit/types" "^6.7.1"
+ deprecation "^2.0.0"
+ is-plain-object "^5.0.0"
+ node-fetch "^2.6.1"
+ once "^1.4.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/rest@^16.28.4", "@octokit/rest@^16.43.1":
version "16.43.2"
resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b"
integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==
@@ -3283,6 +3363,13 @@
"@octokit/openapi-types" "^2.2.0"
"@types/node" ">= 8"
+"@octokit/types@^6.7.1":
+ version "6.11.1"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.11.1.tgz#54ece128029526fa99bd71e757b9e35478403d95"
+ integrity sha512-UiSRTG2lrFbMUMwhKNR0uSV33Fzv4bNu1n5iFuuNOg80XCh0VYNhR4TQWgrkLhVxdDuej6s61aP3eQvVm6K6uA==
+ dependencies:
+ "@octokit/openapi-types" "^5.2.1"
+
"@opentelemetry/api@0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae"
@@ -3466,6 +3553,20 @@
"@svgr/plugin-svgo" "^4.3.1"
loader-utils "^1.2.3"
+"@testing-library/dom@7.29.6":
+ version "7.29.6"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.6.tgz#eb37844fb431186db7960a7ff6749ea65a19617c"
+ integrity sha512-vzTsAXa439ptdvav/4lsKRcGpAQX7b6wBIqia7+iNzqGJ5zjswApxA6jDAsexrc6ue9krWcbh8o+LYkBXW+GCQ==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/runtime" "^7.12.5"
+ "@types/aria-query" "^4.2.0"
+ aria-query "^4.2.2"
+ chalk "^4.1.0"
+ dom-accessibility-api "^0.5.4"
+ lz-string "^1.4.4"
+ pretty-format "^26.6.2"
+
"@testing-library/dom@^7.17.1":
version "7.29.1"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.1.tgz#a08ebeb26b2ea859b1621ff9642d114c1f04fe3a"
@@ -3738,7 +3839,21 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@2.34.0", "@typescript-eslint/eslint-plugin@^2.10.0":
+"@typescript-eslint/eslint-plugin@4.16.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz#2caf6a79dd19c3853b8d39769a27fccb24e4e651"
+ integrity sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "4.16.1"
+ "@typescript-eslint/scope-manager" "4.16.1"
+ debug "^4.1.1"
+ functional-red-black-tree "^1.0.1"
+ lodash "^4.17.15"
+ regexpp "^3.0.0"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/eslint-plugin@^2.10.0":
version "2.34.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9"
integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==
@@ -3748,7 +3863,7 @@
regexpp "^3.0.0"
tsutils "^3.17.1"
-"@typescript-eslint/experimental-utils@2.34.0", "@typescript-eslint/experimental-utils@^2.5.0":
+"@typescript-eslint/experimental-utils@2.34.0":
version "2.34.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
@@ -3758,7 +3873,40 @@
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/parser@2.34.0", "@typescript-eslint/parser@^2.10.0":
+"@typescript-eslint/experimental-utils@4.16.1", "@typescript-eslint/experimental-utils@^4.0.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz#da7a396dc7d0e01922acf102b76efff17320b328"
+ integrity sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/scope-manager" "4.16.1"
+ "@typescript-eslint/types" "4.16.1"
+ "@typescript-eslint/typescript-estree" "4.16.1"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/experimental-utils@^3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686"
+ integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/types" "3.10.1"
+ "@typescript-eslint/typescript-estree" "3.10.1"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/parser@4.16.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.16.1.tgz#3bbd3234dd3c5b882b2bcd9899bc30e1e1586d2a"
+ integrity sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg==
+ dependencies:
+ "@typescript-eslint/scope-manager" "4.16.1"
+ "@typescript-eslint/types" "4.16.1"
+ "@typescript-eslint/typescript-estree" "4.16.1"
+ debug "^4.1.1"
+
+"@typescript-eslint/parser@^2.10.0":
version "2.34.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8"
integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==
@@ -3768,6 +3916,24 @@
"@typescript-eslint/typescript-estree" "2.34.0"
eslint-visitor-keys "^1.1.0"
+"@typescript-eslint/scope-manager@4.16.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz#244e2006bc60cfe46987e9987f4ff49c9e3f00d5"
+ integrity sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw==
+ dependencies:
+ "@typescript-eslint/types" "4.16.1"
+ "@typescript-eslint/visitor-keys" "4.16.1"
+
+"@typescript-eslint/types@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"
+ integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==
+
+"@typescript-eslint/types@4.16.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.16.1.tgz#5ba2d3e38b1a67420d2487519e193163054d9c15"
+ integrity sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA==
+
"@typescript-eslint/typescript-estree@2.34.0":
version "2.34.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
@@ -3781,6 +3947,48 @@
semver "^7.3.2"
tsutils "^3.17.1"
+"@typescript-eslint/typescript-estree@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853"
+ integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==
+ dependencies:
+ "@typescript-eslint/types" "3.10.1"
+ "@typescript-eslint/visitor-keys" "3.10.1"
+ debug "^4.1.1"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash "^4.17.15"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/typescript-estree@4.16.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz#c2fc46b05a48fbf8bbe8b66a63f0a9ba04b356f1"
+ integrity sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg==
+ dependencies:
+ "@typescript-eslint/types" "4.16.1"
+ "@typescript-eslint/visitor-keys" "4.16.1"
+ debug "^4.1.1"
+ globby "^11.0.1"
+ is-glob "^4.0.1"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/visitor-keys@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
+ integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/visitor-keys@4.16.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz#d7571fb580749fae621520deeb134370bbfc7293"
+ integrity sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w==
+ dependencies:
+ "@typescript-eslint/types" "4.16.1"
+ eslint-visitor-keys "^2.0.0"
+
"@uifabric/merge-styles@^7.19.1":
version "7.19.1"
resolved "https://registry.yarnpkg.com/@uifabric/merge-styles/-/merge-styles-7.19.1.tgz#446b3da48ce9925d1649edd0fc232221974b00c9"
@@ -4135,7 +4343,7 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-abort-controller@3.0.0:
+abort-controller@3.0.0, abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
@@ -4166,7 +4374,7 @@ acorn-globals@^6.0.0:
acorn "^7.1.1"
acorn-walk "^7.1.1"
-acorn-jsx@^5.2.0:
+acorn-jsx@^5.2.0, acorn-jsx@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
@@ -4191,7 +4399,7 @@ acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1, acorn@^6.4.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
-acorn@^7.1.1:
+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==
@@ -4276,6 +4484,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^7.0.2:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84"
+ integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
alphanum-sort@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@@ -4480,6 +4698,17 @@ array-includes@^3.0.3, array-includes@^3.1.1:
get-intrinsic "^1.0.1"
is-string "^1.0.5"
+array-includes@^3.1.2:
+ 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==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ get-intrinsic "^1.1.1"
+ is-string "^1.0.5"
+
array-union@^1.0.1, array-union@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -4487,6 +4716,11 @@ array-union@^1.0.1, array-union@^1.0.2:
dependencies:
array-uniq "^1.0.1"
+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-uniq@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
@@ -4600,6 +4834,13 @@ async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+async-retry@1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0"
+ integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==
+ dependencies:
+ retry "0.12.0"
+
async@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
@@ -4645,12 +4886,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@^3.5.4:
- version "3.5.5"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227"
- integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==
+axe-core@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.2.tgz#7cf783331320098bfbef620df3b3c770147bc224"
+ integrity sha512-V+Nq70NxKhYt89ArVcaNL9FDryB3vQOd+BFXZIfO3RP6rwtj+2yqqqdHEkacutglPaZLkJeuXKCjCJDMGPtPqg==
-axobject-query@^2.0.2, axobject-query@^2.1.2:
+axobject-query@^2.0.2, axobject-query@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
@@ -4953,6 +5194,11 @@ before-after-hook@^2.0.0:
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635"
integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==
+before-after-hook@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.1.tgz#99ae36992b5cfab4a83f6bee74ab27835f28f405"
+ integrity sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA==
+
big.js@^5.2.2:
version "5.2.2"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
@@ -5201,6 +5447,11 @@ buble@0.19.6:
regexpu-core "^4.2.0"
vlq "^1.0.0"
+buffer-equal-constant-time@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
+ integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
+
buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@@ -5344,6 +5595,14 @@ call-bind@^1.0.0:
function-bind "^1.1.1"
get-intrinsic "^1.0.0"
+call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
call-me-maybe@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
@@ -5452,15 +5711,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001113, caniuse-lite@^1.0.30001173:
- version "1.0.30001173"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56"
- integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==
-
-caniuse-lite@^1.0.30001154:
- version "1.0.30001176"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001176.tgz#e44bac506d4656bae4944a1417f41597bd307335"
- integrity sha512-VWdkYmqdkDLRe0lvfJlZQ43rnjKqIGKHWhWWRbkqMsJIUaYDNf/K/sdZZcVO6YKQklubokdkJY+ujArsuJ5cag==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001113, caniuse-lite@^1.0.30001154, caniuse-lite@^1.0.30001173:
+ version "1.0.30001194"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001194.tgz"
+ integrity sha512-iDUOH+oFeBYk5XawYsPtsx/8fFpndAPUQJC7gBTfxHM8xw5nOZv7ceAD4frS1MKCLUac7QL5wdAJiFQlDRjXlA==
capture-exit@^2.0.0:
version "2.0.0"
@@ -5484,7 +5738,7 @@ ccount@^1.0.0:
resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==
-chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -5836,6 +6090,11 @@ colorette@^1.2.1:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
+colors@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
columnify@^1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
@@ -5856,7 +6115,7 @@ comma-separated-tokens@^1.0.0:
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
-commander@^2.11.0, commander@^2.19.0, commander@^2.20.0:
+commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -5981,7 +6240,7 @@ config-chain@^1.1.11:
ini "^1.3.4"
proto-list "~1.2.1"
-confusing-browser-globals@^1.0.9:
+confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.9:
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==
@@ -6163,7 +6422,7 @@ core-js@^1.0.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
-core-js@^2.4.0, core-js@^2.4.1:
+core-js@^2.4.0, core-js@^2.4.1, core-js@^2.6.5:
version "2.6.12"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
@@ -6273,7 +6532,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@^7.0.0:
+cross-spawn@^7.0.0, cross-spawn@^7.0.2:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -6736,6 +6995,48 @@ damerau-levenshtein@^1.0.4, damerau-levenshtein@^1.0.6:
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
+danger@10.6.2:
+ version "10.6.2"
+ resolved "https://registry.yarnpkg.com/danger/-/danger-10.6.2.tgz#9d5f471a33a5f092253f694ecee832b3dfbd853b"
+ integrity sha512-EVMone2dJsFzm7VbSspIsV9mOFIjLVdW7WxSO2PMnOCYYoDRKPT3mqgE8pfMWg0xclPjtfJJ7k3AZGirvNWWHQ==
+ dependencies:
+ "@babel/polyfill" "^7.2.5"
+ "@octokit/rest" "^16.43.1"
+ async-retry "1.2.3"
+ chalk "^2.3.0"
+ commander "^2.18.0"
+ debug "^4.1.1"
+ fast-json-patch "^3.0.0-1"
+ get-stdin "^6.0.0"
+ gitlab "^10.0.1"
+ http-proxy-agent "^2.1.0"
+ https-proxy-agent "^2.2.1"
+ hyperlinker "^1.0.0"
+ json5 "^2.1.0"
+ jsonpointer "^4.0.1"
+ jsonwebtoken "^8.4.0"
+ lodash.find "^4.6.0"
+ lodash.includes "^4.3.0"
+ lodash.isobject "^3.0.2"
+ lodash.keys "^4.0.8"
+ lodash.mapvalues "^4.6.0"
+ lodash.memoize "^4.1.2"
+ memfs-or-file-map-to-github-branch "^1.1.0"
+ micromatch "^3.1.10"
+ node-cleanup "^2.1.2"
+ node-fetch "2.6.1"
+ override-require "^1.1.1"
+ p-limit "^2.1.0"
+ parse-diff "^0.7.0"
+ parse-git-config "^2.0.3"
+ parse-github-url "^1.0.2"
+ parse-link-header "^1.0.1"
+ pinpoint "^1.1.0"
+ prettyjson "^1.2.1"
+ readline-sync "^1.4.9"
+ require-from-string "^2.0.2"
+ supports-hyperlinks "^1.0.1"
+
dargs@^4.0.1:
version "4.1.0"
resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
@@ -6870,7 +7171,7 @@ deep-extend@^0.6.0:
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-deep-is@~0.1.3:
+deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
@@ -6987,21 +7288,26 @@ detect-indent@^5.0.0:
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50=
+detect-indent@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
+ integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
+
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.1.0, 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-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-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.0.4"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
@@ -7023,6 +7329,11 @@ dezalgo@^1.0.0:
asap "^2.0.0"
wrappy "1"
+diff-match-patch@^1.0.4:
+ version "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"
@@ -7057,6 +7368,13 @@ dir-glob@^2.2.2:
dependencies:
path-type "^3.0.0"
+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:
+ path-type "^4.0.0"
+
directory-tree@2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/directory-tree/-/directory-tree-2.2.4.tgz#6d5bd7d82e48378e256a1e87b678a43c50076e2e"
@@ -7299,6 +7617,13 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
+ecdsa-sig-formatter@1.0.11:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
+ integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -7348,9 +7673,9 @@ emoji-regex@^8.0.0:
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
emoji-regex@^9.0.0:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.0.tgz#a26da8e832b16a9753309f25e35e3c0efb9a066a"
- integrity sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug==
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
emojis-list@^2.0.0:
version "2.1.0"
@@ -7476,6 +7801,28 @@ es-abstract@^1.18.0-next.1:
string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1"
+es-abstract@^1.18.0-next.2:
+ version "1.18.0-next.3"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.3.tgz#56bc8b5cc36b2cca25a13be07f3c02c2343db6b7"
+ integrity sha512-VMzHx/Bczjg59E6jZOQjHeN3DEoptdhejpARgflAViidlqSpjdq9zA6lKwlhRRs/lOw1gHJv2xkkSFRgvEwbQg==
+ dependencies:
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.2"
+ is-callable "^1.2.3"
+ is-negative-zero "^2.0.1"
+ is-regex "^1.1.2"
+ is-string "^1.0.5"
+ object-inspect "^1.9.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.4"
+ string.prototype.trimstart "^1.0.4"
+ unbox-primitive "^1.0.0"
+
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"
@@ -7555,14 +7902,26 @@ escodegen@^1.11.0, escodegen@^1.14.1, escodegen@^1.9.1:
optionalDependencies:
source-map "~0.6.1"
-eslint-config-react-app@5.2.1, eslint-config-react-app@^5.2.1:
+eslint-config-prettier@8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6"
+ integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==
+
+eslint-config-react-app@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e"
+ integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==
+ dependencies:
+ confusing-browser-globals "^1.0.10"
+
+eslint-config-react-app@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df"
integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==
dependencies:
confusing-browser-globals "^1.0.9"
-eslint-import-resolver-node@^0.3.2, eslint-import-resolver-node@^0.3.3:
+eslint-import-resolver-node@^0.3.2, eslint-import-resolver-node@^0.3.4:
version "0.3.4"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
@@ -7589,6 +7948,19 @@ eslint-module-utils@^2.4.1, eslint-module-utils@^2.6.0:
debug "^2.6.9"
pkg-dir "^2.0.0"
+eslint-plugin-deprecate@0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-deprecate/-/eslint-plugin-deprecate-0.7.0.tgz#04805d2f2884800c580d59933b9c895f31b02437"
+ integrity sha512-MylhCqoH/SJ2MwzVgX0we6oE+lKPVwhOu9hAJ98vMCmbz3FNwqJ8XipdI23bCF7NHxUbhd6mdxFjywKE52pt7A==
+
+eslint-plugin-eslint-comments@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa"
+ integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ ignore "^5.0.5"
+
eslint-plugin-flowtype@4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz#82b2bd6f21770e0e5deede0228e456cb35308451"
@@ -7596,12 +7968,13 @@ eslint-plugin-flowtype@4.6.0:
dependencies:
lodash "^4.17.15"
-eslint-plugin-flowtype@4.7.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.7.0.tgz#903a6ea3eb5cbf4c7ba7fa73cc43fc39ab7e4a70"
- integrity sha512-M+hxhSCk5QBEValO5/UqrS4UunT+MgplIJK5wA1sCtXjzBcZkpTGRwxmLHhGpbHcrmQecgt6ZL/KDdXWqGB7VA==
+eslint-plugin-flowtype@5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.3.1.tgz#df6227e28c61d967b825c1327a27818bbb2ad325"
+ integrity sha512-mziJD+zw+VTwLtF9qLIxYac0GJCbSEDyqMLP5ENzQeNY5EOxbAfitMFLo+UItjYOISQdh1BCobwE2d4i1o+9Rw==
dependencies:
lodash "^4.17.15"
+ string-natural-compare "^3.0.1"
eslint-plugin-import@2.20.1:
version "2.20.1"
@@ -7621,17 +7994,17 @@ eslint-plugin-import@2.20.1:
read-pkg-up "^2.0.0"
resolve "^1.12.0"
-eslint-plugin-import@2.22.0:
- version "2.22.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e"
- integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==
+eslint-plugin-import@2.22.1:
+ version "2.22.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
+ integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
dependencies:
array-includes "^3.1.1"
array.prototype.flat "^1.2.3"
contains-path "^0.1.0"
debug "^2.6.9"
doctrine "1.5.0"
- eslint-import-resolver-node "^0.3.3"
+ eslint-import-resolver-node "^0.3.4"
eslint-module-utils "^2.6.0"
has "^1.0.3"
minimatch "^3.0.4"
@@ -7640,12 +8013,26 @@ eslint-plugin-import@2.22.0:
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
-eslint-plugin-jest@23.20.0:
- version "23.20.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz#e1d69c75f639e99d836642453c4e75ed22da4099"
- integrity sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw==
+eslint-plugin-jest@24.1.5:
+ version "24.1.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.5.tgz#1e866a9f0deac587d0a3d5d7cefe99815a580de2"
+ integrity sha512-FIP3lwC8EzEG+rOs1y96cOJmMVpdFNreoDJv29B5vIupVssRi8zrSY3QadogT0K3h1Y8TMxJ6ZSAzYUmFCp2hg==
dependencies:
- "@typescript-eslint/experimental-utils" "^2.5.0"
+ "@typescript-eslint/experimental-utils" "^4.0.1"
+
+eslint-plugin-json-format@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-json-format/-/eslint-plugin-json-format-2.0.1.tgz#31c6ef89e8210ba2e262381eb5d26d24cb74bc67"
+ integrity sha512-eWT0sNqIEYzKqbej2dvz+/oQ4JQxthE3i+izjInIdfbsPfVgBtiWbmagkgKStje0LJqo9FATx1LWl6xcuxqsBQ==
+ dependencies:
+ common-tags "^1.8.0"
+ debug "^4.1.1"
+ diff-match-patch "^1.0.4"
+ json-fixer "^1.3.2"
+ line-column "^1.0.2"
+ lodash "^4.17.15"
+ minimatch "^3.0.4"
+ sort-package-json "^1.22.1"
eslint-plugin-jsx-a11y@6.2.3:
version "6.2.3"
@@ -7662,27 +8049,27 @@ eslint-plugin-jsx-a11y@6.2.3:
has "^1.0.3"
jsx-ast-utils "^2.2.1"
-eslint-plugin-jsx-a11y@6.3.1:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660"
- integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==
+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==
dependencies:
- "@babel/runtime" "^7.10.2"
+ "@babel/runtime" "^7.11.2"
aria-query "^4.2.2"
array-includes "^3.1.1"
ast-types-flow "^0.0.7"
- axe-core "^3.5.4"
- axobject-query "^2.1.2"
+ axe-core "^4.0.2"
+ axobject-query "^2.2.0"
damerau-levenshtein "^1.0.6"
emoji-regex "^9.0.0"
has "^1.0.3"
- jsx-ast-utils "^2.4.1"
+ jsx-ast-utils "^3.1.0"
language-tags "^1.0.5"
-eslint-plugin-react-hooks@2.5.1:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0"
- integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==
+eslint-plugin-react-hooks@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556"
+ integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==
eslint-plugin-react-hooks@^1.6.1:
version "1.7.0"
@@ -7707,23 +8094,30 @@ eslint-plugin-react@7.19.0:
string.prototype.matchall "^4.0.2"
xregexp "^4.3.0"
-eslint-plugin-react@7.20.5:
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.5.tgz#29480f3071f64a04b2c3d99d9b460ce0f76fb857"
- integrity sha512-ajbJfHuFnpVNJjhyrfq+pH1C0gLc2y94OiCbAXT5O0J0YCKaFEHDV8+3+mDOr+w8WguRX+vSs1bM2BDG0VLvCw==
+eslint-plugin-react@7.22.0:
+ version "7.22.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269"
+ integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==
dependencies:
array-includes "^3.1.1"
array.prototype.flatmap "^1.2.3"
doctrine "^2.1.0"
has "^1.0.3"
- jsx-ast-utils "^2.4.1"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
object.entries "^1.1.2"
object.fromentries "^2.0.2"
object.values "^1.1.1"
prop-types "^15.7.2"
- resolve "^1.17.0"
+ resolve "^1.18.1"
string.prototype.matchall "^4.0.2"
+eslint-plugin-testing-library@3.10.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.1.tgz#4dd02306d601c3238fdabf1d1dbc5f2a8e85d531"
+ integrity sha512-nQIFe2muIFv2oR2zIuXE4vTbcFNx8hZKRzgHZqJg8rfopIWwoTwtlbCCNELT/jXzVe1uZF68ALGYoDXjLczKiQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "^3.10.1"
+
eslint-scope@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -7732,7 +8126,7 @@ eslint-scope@^4.0.3:
esrecurse "^4.1.0"
estraverse "^4.1.1"
-eslint-scope@^5.0.0:
+eslint-scope@^5.0.0, 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==
@@ -7747,19 +8141,67 @@ eslint-utils@^1.4.3:
dependencies:
eslint-visitor-keys "^1.1.0"
-eslint-utils@^2.0.0:
+eslint-utils@^2.0.0, eslint-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
dependencies:
eslint-visitor-keys "^1.1.0"
-eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.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"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
-eslint@6.8.0, eslint@^6.6.0:
+eslint-visitor-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
+ integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+
+eslint@7.21.0:
+ version "7.21.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83"
+ integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==
+ dependencies:
+ "@babel/code-frame" "7.12.11"
+ "@eslint/eslintrc" "^0.4.0"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.1"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ file-entry-cache "^6.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash "^4.17.20"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^6.0.4"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+eslint@^6.6.0:
version "6.8.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
@@ -7811,6 +8253,15 @@ espree@^6.1.2:
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0"
+espree@^7.3.0, espree@^7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
+ integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^1.3.0"
+
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -7823,6 +8274,13 @@ esquery@^1.0.1:
dependencies:
estraverse "^5.1.0"
+esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ dependencies:
+ estraverse "^5.1.0"
+
esrecurse@^4.1.0, esrecurse@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
@@ -7956,6 +8414,13 @@ expand-template@^2.0.3:
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+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"
@@ -8098,12 +8563,29 @@ fast-glob@^2.0.2, fast-glob@^2.2.6:
merge2 "^1.2.3"
micromatch "^3.1.10"
+fast-glob@^3.0.3, fast-glob@^3.1.1:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+ integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-patch@^3.0.0-1:
+ version "3.0.0-1"
+ resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.0.0-1.tgz#4c68f2e7acfbab6d29d1719c44be51899c93dabb"
+ integrity sha512-6pdFb07cknxvPzCeLsFHStEy+MysPJPgZQ9LbQ/2O67unQF93SNqfdSqnPPl71YMHX+AD8gbl7iuoGFzHEdDuw==
+
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"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@~2.0.6:
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
@@ -8118,6 +8600,13 @@ fastparse@^1.1.2:
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
+fastq@^1.6.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
+ integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
+ dependencies:
+ reusify "^1.0.4"
+
faye-websocket@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
@@ -8266,6 +8755,13 @@ file-entry-cache@^5.0.1:
dependencies:
flat-cache "^2.0.1"
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
file-loader@4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af"
@@ -8301,6 +8797,11 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
+filter-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
+ integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs=
+
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
@@ -8380,11 +8881,24 @@ flat-cache@^2.0.1:
rimraf "2.6.3"
write "1.0.3"
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
flatted@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+flatted@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
+ integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
+
flatten@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
@@ -8446,6 +8960,15 @@ fork-ts-checker-webpack-plugin@3.1.1:
tapable "^1.0.0"
worker-rpc "^0.1.0"
+form-data@^2.5.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4"
+ integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ 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"
@@ -8512,6 +9035,11 @@ fs-constants@^1.0.0:
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+fs-exists-sync@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
+ integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=
+
fs-extra@^4.0.2:
version "4.0.3"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
@@ -8656,6 +9184,15 @@ get-intrinsic@^1.0.0, get-intrinsic@^1.0.1, get-intrinsic@^1.0.2:
has "^1.0.3"
has-symbols "^1.0.1"
+get-intrinsic@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+ integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
get-node-dimensions@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz#fb7b4bb57060fb4247dd51c9d690dfbec56b0823"
@@ -8723,6 +9260,20 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
+git-config-path@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664"
+ integrity sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ=
+ dependencies:
+ extend-shallow "^2.0.1"
+ fs-exists-sync "^0.1.0"
+ homedir-polyfill "^1.0.0"
+
+git-hooks-list@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156"
+ integrity sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==
+
git-raw-commits@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5"
@@ -8784,6 +9335,19 @@ github-slugger@^1.0.0:
dependencies:
emoji-regex ">=6.0.0 <=6.1.1"
+gitlab@^10.0.1:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/gitlab/-/gitlab-10.2.1.tgz#1f5fb2c2bad08f95b7c7d91dd41805ab5eea3960"
+ integrity sha512-z+DxRF1C9uayVbocs9aJkJz+kGy14TSm1noB/rAIEBbXOkOYbjKxyuqJzt+0zeFpXFdgA0yq6DVVbvM7HIfGwg==
+ dependencies:
+ form-data "^2.5.0"
+ humps "^2.0.1"
+ ky "^0.12.0"
+ ky-universal "^0.3.0"
+ li "^1.3.0"
+ query-string "^6.8.2"
+ universal-url "^2.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"
@@ -8792,7 +9356,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob-parent@^5.0.0, glob-parent@~5.1.0:
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
@@ -8849,6 +9413,20 @@ globals@^12.1.0:
dependencies:
type-fest "^0.8.1"
+globby@10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.0.tgz#abfcd0630037ae174a88590132c2f6804e291072"
+ integrity sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
+
globby@8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
@@ -8862,6 +9440,18 @@ globby@8.0.2:
pify "^3.0.0"
slash "^1.0.0"
+globby@^11.0.1:
+ version "11.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83"
+ integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -8967,11 +9557,21 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
+has-bigints@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
+ integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+
has-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+ integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -8982,6 +9582,11 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+has-symbols@^1.0.0, has-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
+ integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+
has-symbols@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
@@ -9115,6 +9720,11 @@ hastscript@^6.0.0:
property-information "^5.0.0"
space-separated-tokens "^1.0.0"
+hasurl@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hasurl/-/hasurl-1.0.0.tgz#e4c619097ae1e8fc906bee904ce47e94f5e1ea37"
+ integrity sha512-43ypUd3DbwyCT01UYpA99AEZxZ4aKtRxWGBHEIbjcOsUghd9YUON0C+JF6isNjaiwC/UF5neaUudy6JS9jZPZQ==
+
he@1.2.0, he@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -9163,6 +9773,13 @@ hoist-non-react-statics@^3.1.0:
dependencies:
react-is "^16.7.0"
+homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
hosted-git-info@^2.1.4, hosted-git-info@^2.7.1:
version "2.8.8"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
@@ -9372,7 +9989,7 @@ https-proxy-agent@5.0.0:
agent-base "6"
debug "4"
-https-proxy-agent@^2.2.3:
+https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3:
version "2.2.4"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
@@ -9392,6 +10009,11 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
+humps@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa"
+ integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao=
+
husky@1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0"
@@ -9408,6 +10030,11 @@ husky@1.3.1:
run-node "^1.0.0"
slash "^2.0.0"
+hyperlinker@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e"
+ integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==
+
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"
@@ -9473,7 +10100,7 @@ ignore@^4.0.3, ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-ignore@^5.0.4:
+ignore@^5.0.4, ignore@^5.0.5, ignore@^5.1.1, ignore@^5.1.4:
version "5.1.8"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
@@ -9505,7 +10132,7 @@ import-fresh@^2.0.0:
caller-path "^2.0.0"
resolve-from "^3.0.0"
-import-fresh@^3.0.0, import-fresh@^3.1.0:
+import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@@ -9787,6 +10414,11 @@ is-arrayish@^0.3.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+is-bigint@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2"
+ integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==
+
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"
@@ -9801,6 +10433,13 @@ is-binary-path@~2.1.0:
dependencies:
binary-extensions "^2.0.0"
+is-boolean-object@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"
+ integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==
+ dependencies:
+ call-bind "^1.0.0"
+
is-buffer@^1.0.2, is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -9816,6 +10455,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
+is-callable@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
+ integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
+
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
@@ -9962,11 +10606,16 @@ is-module@^1.0.0:
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
-is-negative-zero@^2.0.0:
+is-negative-zero@^2.0.0, 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==
+is-number-object@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
+ integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
+
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -10008,16 +10657,16 @@ is-path-inside@^2.1.0:
dependencies:
path-is-inside "^1.0.2"
+is-plain-obj@2.1.0, is-plain-obj@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
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-obj@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
- integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
-
is-plain-object@^2.0.1, is-plain-object@^2.0.3, 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"
@@ -10042,6 +10691,14 @@ is-regex@^1.0.4, is-regex@^1.1.1:
dependencies:
has-symbols "^1.0.1"
+is-regex@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251"
+ integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-symbols "^1.0.1"
+
is-regexp@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
@@ -10086,7 +10743,7 @@ is-svg@^3.0.0:
dependencies:
html-comment-regex "^1.1.0"
-is-symbol@^1.0.2:
+is-symbol@^1.0.2, is-symbol@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
@@ -11157,6 +11814,15 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+json-fixer@^1.3.2:
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/json-fixer/-/json-fixer-1.6.8.tgz#4a1930af55ca0baa410c3a2cdf2b065ba87121ed"
+ integrity sha512-VUI3GPVLpM/nYmM1tSuvd3kh36eWvoNO1SFveVQf5k9QJI3kfaoOPVbN7WbpRfvZqa2BFySyVuqSs57laYfIDQ==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ chalk "^4.1.0"
+ pegjs "^0.10.0"
+
json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -11172,6 +11838,11 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+json-schema-traverse@^1.0.0:
+ version "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"
@@ -11206,6 +11877,13 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+json5@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
+ integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
+ dependencies:
+ minimist "^1.2.5"
+
json5@^2.1.2, json5@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
@@ -11230,6 +11908,27 @@ jsonparse@^1.2.0:
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+jsonpointer@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc"
+ integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==
+
+jsonwebtoken@^8.4.0:
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
+ integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
+ dependencies:
+ jws "^3.2.2"
+ lodash.includes "^4.3.0"
+ lodash.isboolean "^3.0.3"
+ lodash.isinteger "^4.0.4"
+ lodash.isnumber "^3.0.3"
+ lodash.isplainobject "^4.0.6"
+ lodash.isstring "^4.0.1"
+ lodash.once "^4.0.0"
+ ms "^2.1.1"
+ semver "^5.6.0"
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -11240,7 +11939,7 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
-jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3, jsx-ast-utils@^2.4.1:
+jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
version "2.4.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e"
integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==
@@ -11248,6 +11947,31 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3, jsx-ast-utils@^2.4.1:
array-includes "^3.1.1"
object.assign "^4.1.0"
+"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==
+ dependencies:
+ array-includes "^3.1.2"
+ object.assign "^4.1.2"
+
+jwa@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
+ integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
+ dependencies:
+ buffer-equal-constant-time "1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
+jws@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
+ integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
+ dependencies:
+ jwa "^1.4.1"
+ safe-buffer "^5.0.1"
+
keyboard-key@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/keyboard-key/-/keyboard-key-1.1.0.tgz#6f2e8e37fa11475bb1f1d65d5174f1b35653f5b7"
@@ -11299,6 +12023,19 @@ klona@^2.0.4:
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
+ky-universal@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e"
+ integrity sha512-CM4Bgb2zZZpsprcjI6DNYTaH3oGHXL2u7BU4DK+lfCuC4snkt9/WRpMYeKbBbXscvKkeqBwzzjFX2WwmKY5K/A==
+ dependencies:
+ abort-controller "^3.0.0"
+ node-fetch "^2.6.0"
+
+ky@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/ky/-/ky-0.12.0.tgz#c05be95e6745ba422a6d2cc8ae964164962279f9"
+ integrity sha512-t9b7v3V2fGwAcQnnDDQwKQGF55eWrf4pwi1RN08Fy8b/9GEwV7Ea0xQiaSW6ZbeghBHIwl8kgnla4vVo9seepQ==
+
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"
@@ -11392,6 +12129,19 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+li@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/li/-/li-1.3.0.tgz#22c59bcaefaa9a8ef359cf759784e4bf106aea1b"
+ integrity sha1-IsWbyu+qmo7zWc91l4TkvxBq6hs=
+
line-column@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2"
@@ -11565,26 +12315,76 @@ lodash.clonedeep@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+lodash.find@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1"
+ integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=
+
lodash.get@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+lodash.includes@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
+ integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
+
+lodash.isboolean@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
+ integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
+
+lodash.isinteger@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
+ integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
+
lodash.ismatch@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=
+lodash.isnumber@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
+ integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
+
+lodash.isobject@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d"
+ integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=
+
lodash.isplainobject@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+ integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
+
+lodash.keys@^4.0.8:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205"
+ integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU=
+
+lodash.mapvalues@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
+ integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=
+
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+lodash.once@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+ integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
+
lodash.set@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
@@ -11861,6 +12661,13 @@ mem@^4.0.0:
mimic-fn "^2.0.0"
p-is-promise "^2.0.0"
+memfs-or-file-map-to-github-branch@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/memfs-or-file-map-to-github-branch/-/memfs-or-file-map-to-github-branch-1.2.0.tgz#a56cd13443144a8c7fbe2a4b90b5f570fb39c845"
+ integrity sha512-PloI9AkRXrLQuBU1s7eYQpl+4hkL0U0h23lddMaJ3ZGUufn8pdNRxd1kCfBqL5gISCFQs78ttXS15e4/f5vcTA==
+ dependencies:
+ "@octokit/rest" "^16.43.1"
+
memoize-one@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0"
@@ -11949,7 +12756,7 @@ 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.2.3:
+merge2@^1.2.3, merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -12446,6 +13253,11 @@ node-addon-api@^3.0.2:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239"
integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==
+node-cleanup@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c"
+ integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=
+
node-dir@^0.1.10:
version "0.1.17"
resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
@@ -12469,7 +13281,7 @@ node-fetch-npm@^2.0.2:
json-parse-better-errors "^1.0.0"
safe-buffer "^5.1.1"
-node-fetch@2.6.1, node-fetch@^2.5.0, node-fetch@^2.6.1:
+node-fetch@2.6.1, node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
@@ -12807,7 +13619,7 @@ object-visit@^1.0.0:
dependencies:
isobject "^3.0.0"
-object.assign@^4.1.0, object.assign@^4.1.1:
+object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
@@ -12941,6 +13753,18 @@ optionator@^0.8.1, optionator@^0.8.3:
type-check "~0.3.2"
word-wrap "~1.2.3"
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
original@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
@@ -12995,6 +13819,11 @@ osenv@^0.1.4, osenv@^0.1.5:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
+override-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/override-require/-/override-require-1.1.1.tgz#6ae22fadeb1f850ffb0cf4c20ff7b87e5eb650df"
+ integrity sha1-auIvresfhQ/7DPTCD/e4fl62UN8=
+
p-defer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
@@ -13036,7 +13865,7 @@ p-limit@^1.1.0:
dependencies:
p-try "^1.0.0"
-p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.2:
+p-limit@^2.0.0, p-limit@^2.1.0, p-limit@^2.2.0, p-limit@^2.2.2:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -13186,6 +14015,11 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
+parse-diff@^0.7.0:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4"
+ integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==
+
parse-entities@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
@@ -13198,11 +14032,25 @@ parse-entities@^2.0.0:
is-decimal "^1.0.0"
is-hexadecimal "^1.0.0"
+parse-git-config@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-2.0.3.tgz#6fb840d4a956e28b971c97b33a5deb73a6d5b6bb"
+ integrity sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==
+ dependencies:
+ expand-tilde "^2.0.2"
+ git-config-path "^1.0.1"
+ ini "^1.3.5"
+
parse-github-repo-url@^1.3.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A=
+parse-github-url@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395"
+ integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==
+
parse-json@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
@@ -13228,6 +14076,18 @@ parse-json@^5.0.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse-link-header@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7"
+ integrity sha1-vt/g0hGK64S+deewJUGeyKYRQKc=
+ dependencies:
+ xtend "~4.0.1"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
parse-path@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa"
@@ -13392,6 +14252,11 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
+pegjs@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd"
+ integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=
+
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
@@ -13439,6 +14304,11 @@ pinkie@^2.0.0:
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+pinpoint@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pinpoint/-/pinpoint-1.1.0.tgz#0cf7757a6977f1bf7f6a32207b709e377388e874"
+ integrity sha1-DPd1eml38b9/ajIge3CeN3OI6HQ=
+
pirates@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
@@ -14303,6 +15173,11 @@ prebuild-install@^6.0.0:
tunnel-agent "^0.6.0"
which-pm-runs "^1.0.0"
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@@ -14351,6 +15226,14 @@ pretty-format@^26.6.2:
ansi-styles "^4.0.0"
react-is "^17.0.1"
+prettyjson@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.1.tgz#fcffab41d19cab4dfae5e575e64246619b12d289"
+ integrity sha1-/P+rQdGcq0365eV15kJGYZsS0ok=
+ dependencies:
+ colors "^1.1.2"
+ minimist "^1.2.0"
+
prism-react-renderer@^1.0.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz#1c1be61b1eb9446a146ca7a50b7bcf36f2a70a44"
@@ -14544,6 +15427,16 @@ query-string@^4.1.0:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
+query-string@^6.8.2:
+ version "6.14.0"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.0.tgz#0b7b7ca326f5facf10dd2d45d26645cd287f8c92"
+ integrity sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ filter-obj "^1.1.0"
+ split-on-first "^1.0.0"
+ strict-uri-encode "^2.0.0"
+
querystring-es3@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
@@ -14559,6 +15452,11 @@ querystringify@^2.1.1:
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+queue-microtask@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3"
+ integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==
+
quick-lru@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
@@ -15084,6 +15982,11 @@ readdirp@~3.5.0:
dependencies:
picomatch "^2.2.1"
+readline-sync@^1.4.9:
+ version "1.4.10"
+ resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b"
+ integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==
+
reakit-system@^0.15.1:
version "0.15.1"
resolved "https://registry.yarnpkg.com/reakit-system/-/reakit-system-0.15.1.tgz#bf5cc7a03f60a817373bc9cbb4a689c1f4100547"
@@ -15224,7 +16127,7 @@ regexpp@^2.0.1:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
-regexpp@^3.0.0:
+regexpp@^3.0.0, regexpp@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
@@ -15420,6 +16323,11 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
require-main-filename@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
@@ -15552,15 +16460,20 @@ 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, 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.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
-retry@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
- integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+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==
rework-visit@1.0.0:
version "1.0.0"
@@ -15599,7 +16512,7 @@ rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1:
dependencies:
glob "^7.1.3"
-rimraf@^3.0.0:
+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==
@@ -15670,6 +16583,13 @@ run-node@^1.0.0:
resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+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:
+ queue-microtask "^1.2.2"
+
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"
@@ -15889,7 +16809,7 @@ semver@7.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-semver@^7.3.2:
+semver@^7.2.1, semver@^7.3.2:
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
@@ -16246,6 +17166,23 @@ sort-keys@^2.0.0:
dependencies:
is-plain-obj "^1.0.0"
+sort-object-keys@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45"
+ integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==
+
+sort-package-json@^1.22.1:
+ version "1.49.0"
+ resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.49.0.tgz#82845ab598501bb35875f326e4768a5ab5f15335"
+ integrity sha512-3YuqFGThwc9X0TZLYohOUJJ/P6uJIVcTeuJOc6ZWw4f1fHpTHIfVysKer4qXtrZ2zvwwU2aEcb555Bo+2fwIgQ==
+ dependencies:
+ detect-indent "^6.0.0"
+ detect-newline "3.1.0"
+ git-hooks-list "1.0.3"
+ globby "10.0.0"
+ is-plain-obj "2.1.0"
+ sort-object-keys "^1.1.3"
+
source-list-map@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
@@ -16356,6 +17293,11 @@ spdy@^4.0.1:
select-hose "^2.0.0"
spdy-transport "^3.0.0"
+split-on-first@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
+ integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
+
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"
@@ -16506,6 +17448,11 @@ strict-uri-encode@^1.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+strict-uri-encode@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
+ integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
+
string-argv@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
@@ -16540,6 +17487,11 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
+string-natural-compare@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
+ integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
+
string-width@^1.0.1, string-width@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -16596,6 +17548,14 @@ string.prototype.trimend@^1.0.1:
call-bind "^1.0.0"
define-properties "^1.1.3"
+string.prototype.trimend@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
+ integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
string.prototype.trimstart@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa"
@@ -16604,6 +17564,14 @@ string.prototype.trimstart@^1.0.1:
call-bind "^1.0.0"
define-properties "^1.1.3"
+string.prototype.trimstart@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
+ integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -16714,7 +17682,7 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
-strip-json-comments@^3.0.1:
+strip-json-comments@^3.0.1, 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==
@@ -16835,7 +17803,7 @@ supports-color@^3.2.3:
dependencies:
has-flag "^1.0.0"
-supports-color@^5.3.0, supports-color@^5.4.0:
+supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.4.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
@@ -16856,6 +17824,14 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
+supports-hyperlinks@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7"
+ integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==
+ dependencies:
+ has-flag "^2.0.0"
+ supports-color "^5.0.0"
+
supports-hyperlinks@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"
@@ -16908,6 +17884,16 @@ table@^5.2.3:
slice-ansi "^2.1.0"
string-width "^3.0.0"
+table@^6.0.4:
+ version "6.0.7"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34"
+ integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==
+ dependencies:
+ ajv "^7.0.2"
+ lodash "^4.17.20"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.0"
+
tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@@ -17322,6 +18308,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@@ -17424,6 +18417,16 @@ umask@^1.1.0:
resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=
+unbox-primitive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.0.tgz#eeacbc4affa28e9b3d36b5eaeccc50b3251b1d3f"
+ integrity sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==
+ dependencies:
+ function-bind "^1.1.1"
+ has-bigints "^1.0.0"
+ has-symbols "^1.0.0"
+ which-boxed-primitive "^1.0.1"
+
unescape@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96"
@@ -17585,6 +18588,14 @@ unist-util-visit@^1.4.1:
dependencies:
unist-util-visit-parents "^2.0.0"
+universal-url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universal-url/-/universal-url-2.0.0.tgz#35e7fc2c3374804905cee67ea289ed3a47669809"
+ integrity sha512-3DLtXdm/G1LQMCnPj+Aw7uDoleQttNHp2g5FnNQKR6cP6taNWS1b/Ehjjx4PVyvejKi3TJyu8iBraKM4q3JQPg==
+ dependencies:
+ hasurl "^1.0.0"
+ whatwg-url "^7.0.0"
+
universal-user-agent@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557"
@@ -18142,6 +19153,17 @@ whatwg-url@^8.0.0:
tr46 "^2.0.2"
webidl-conversions "^6.1.0"
+which-boxed-primitive@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
@@ -18185,7 +19207,7 @@ windows-release@^3.1.0:
dependencies:
execa "^1.0.0"
-word-wrap@~1.2.3:
+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==