Skip to content

Commit e12a69a

Browse files
authoredMay 23, 2020
🎯 2020 code cleanup (#71)
* start code revise * use constant for duration * add github action * start to check lint with hook * clean update animate * fix test * fix lint and use constant * introduce more constant * code clean up * disable useEffect lint
1 parent db0f8d2 commit e12a69a

16 files changed

+353
-121
lines changed
 

‎.eslintrc.js

+30-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,41 @@
11
module.exports = {
22
parser: '@typescript-eslint/parser',
3-
extends: ['plugin:@typescript-eslint/recommended'],
3+
extends: [
4+
'plugin:@typescript-eslint/recommended',
5+
'plugin:react/recommended',
6+
],
47
parserOptions: {
58
ecmaVersion: 2018,
69
sourceType: 'module',
710
},
11+
plugins: ['react-hooks'],
812
rules: {
13+
curly: 'error',
14+
'@typescript-eslint/ban-ts-comment': 'warn',
915
'@typescript-eslint/indent': 'off',
16+
'@typescript-eslint/no-non-null-assertion': 'off',
17+
'@typescript-eslint/no-empty-function': 'off',
18+
'@typescript-eslint/no-explicit-any': 'off',
1019
'@typescript-eslint/explicit-function-return-type': 'off',
11-
"@typescript-eslint/ban-ts-ignore": "warn"
20+
'@typescript-eslint/no-object-literal-type-assertion': 'off',
21+
'react-hooks/rules-of-hooks': 'error',
22+
'react-hooks/exhaustive-deps': 'error',
23+
'react/display-name': 'warn',
24+
'no-console': 'error',
25+
},
26+
overrides: [
27+
{
28+
files: ['*.test.ts', '*.test.tsx'],
29+
rules: {
30+
// Allow testing runtime errors to suppress TS errors
31+
'@typescript-eslint/ban-ts-ignore': 'off',
32+
},
33+
},
34+
],
35+
settings: {
36+
react: {
37+
pragma: 'React',
38+
version: 'detect',
39+
},
1240
},
1341
};
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: Package Size
2+
3+
on: [pull_request]
4+
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
9+
steps:
10+
- uses: actions/checkout@v2
11+
- uses: preactjs/compressed-size-action@v1
12+
with:
13+
repo-token: '${{ secrets.GITHUB_TOKEN }}'

‎.github/workflows/unitTest.yml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: Unit Test / Lint
2+
3+
on: [pull_request]
4+
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
9+
steps:
10+
- uses: actions/checkout@v2
11+
- name: Run install
12+
run: npm install
13+
- name: Run test
14+
run: npm run lint && npm run test

‎package.json

+8-7
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,27 @@
3838
"@types/jest": "^25.2.3",
3939
"@types/react": "^16.9.35",
4040
"@types/react-test-renderer": "^16.9.2",
41-
"@typescript-eslint/eslint-plugin": "^2.34.0",
42-
"@typescript-eslint/parser": "^2.34.0",
41+
"@typescript-eslint/eslint-plugin": "^3.0.0",
42+
"@typescript-eslint/parser": "^3.0.0",
4343
"coveralls": "^3.0.3",
4444
"enzyme": "^3.11.0",
4545
"enzyme-adapter-react-16": "^1.15.2",
4646
"eslint": "^7.0.0",
47+
"eslint-plugin-react-hooks": "^4.0.2",
4748
"husky": "^4.2.5",
4849
"jest": "^26.0.1",
49-
"lint-staged": "^10.2.4",
50+
"lint-staged": "^10.2.6",
5051
"npm-run-all": "^4.1.5",
5152
"prettier": "^2.0.5",
5253
"react": "^16.13.1",
5354
"react-dom": "^16.13.1",
5455
"react-test-renderer": "^16.13.1",
55-
"rollup": "^2.10.5",
56+
"rollup": "^2.10.7",
5657
"rollup-plugin-typescript2": "^0.27.1",
5758
"ts-jest": "^26.0.0",
5859
"typescript": "^3.9.3",
59-
"uglify-es": "^3.3.9"
60+
"uglify-es": "^3.3.9",
61+
"eslint-plugin-react": "^7.20.0"
6062
},
6163
"peerDependencies": {
6264
"react": "^16.8.0",
@@ -70,8 +72,7 @@
7072
"lint-staged": {
7173
"*.{tsx,ts}": [
7274
"eslint --fix",
73-
"prettier --config ./.prettierrc --write",
74-
"git add"
75+
"prettier --config ./.prettierrc --write"
7576
]
7677
}
7778
}

‎src/animate.tsx

+8-6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { AnimateContext } from './animateGroup';
33
import secToMs from './utils/secToMs';
44
import getSequenceId from './utils/getSequenceId';
55
import isUndefined from './utils/isUndefined';
6+
import { ALL, DEFAULT_DURATION, DEFAULT_EASE_TYPE } from './constants';
67
import { AnimationProps } from './types';
78

89
export default function Animate(props: AnimationProps) {
@@ -15,8 +16,8 @@ export default function Animate(props: AnimationProps) {
1516
complete = '',
1617
onComplete,
1718
delay = 0,
18-
duration = 0.3,
19-
easeType = 'linear',
19+
duration = DEFAULT_DURATION,
20+
easeType = DEFAULT_EASE_TYPE,
2021
sequenceId,
2122
sequenceIndex,
2223
} = props;
@@ -26,16 +27,18 @@ export default function Animate(props: AnimationProps) {
2627
const id = getSequenceId(sequenceIndex, sequenceId);
2728

2829
React.useEffect(() => {
29-
if ((!isUndefined(sequenceIndex) && sequenceIndex >= 0) || sequenceId)
30+
if ((!isUndefined(sequenceIndex) && sequenceIndex >= 0) || sequenceId) {
3031
register(props);
32+
}
33+
// eslint-disable-next-line react-hooks/exhaustive-deps
3134
}, []);
3235

3336
React.useEffect(() => {
3437
const animationState = animationStates[id] || {};
3538

3639
setStyle({
3740
...(play || animationState.play ? end : start),
38-
transition: `all ${duration}s ${easeType} ${parseFloat(
41+
transition: `${ALL} ${duration}s ${easeType} ${parseFloat(
3942
animationState.delay || delay,
4043
)}s`,
4144
});
@@ -47,9 +50,8 @@ export default function Animate(props: AnimationProps) {
4750
}, secToMs(parseFloat(animationState.delay || delay) + duration));
4851
}
4952

50-
return () => {
53+
return () =>
5154
onCompleteTimeRef.current && clearTimeout(onCompleteTimeRef.current);
52-
};
5355
}, [
5456
id,
5557
animationStates,

‎src/animateGroup.tsx

+29-15
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import * as React from 'react';
2-
import { Sequences, AnimationProps, AnimateKeyframesProps } from './types';
32
import calculateTotalDuration from './utils/calculateTotalDuration';
43
import getSequenceId from './utils/getSequenceId';
54
import isUndefined from './utils/isUndefined';
5+
import { DEFAULT_DURATION } from './constants';
6+
import { Sequences, AnimationProps, AnimateKeyframesProps } from './types';
67

78
export interface Props {
89
play: boolean;
@@ -15,39 +16,51 @@ export const AnimateContext = React.createContext({
1516
register: (data: AnimationProps | AnimateKeyframesProps): void => {},
1617
});
1718

18-
export default function AnimateGroup(props: Props) {
19-
const { play, sequences = [], children } = props;
19+
export default function AnimateGroup({
20+
play,
21+
sequences = [],
22+
children,
23+
}: Props) {
2024
const [animationStates, setAnimationStates] = React.useState({});
2125
const animationsRef = React.useRef<{
2226
[key: string]: AnimationProps | AnimateKeyframesProps;
2327
}>({});
2428

25-
const register = (data: AnimationProps | AnimateKeyframesProps) => {
26-
const { sequenceIndex, sequenceId } = data;
27-
if (isUndefined(sequenceId) && isUndefined(sequenceIndex)) return;
28-
29-
animationsRef.current[getSequenceId(sequenceIndex, sequenceId)] = data;
30-
};
29+
const register = React.useCallback(
30+
(data: AnimationProps | AnimateKeyframesProps) => {
31+
const { sequenceIndex, sequenceId } = data;
32+
if (!isUndefined(sequenceId) || !isUndefined(sequenceIndex)) {
33+
animationsRef.current[getSequenceId(sequenceIndex, sequenceId)] = data;
34+
}
35+
},
36+
[],
37+
);
3138

32-
React.useEffect((): void => {
39+
React.useEffect(() => {
3340
const sequencesToAnimate =
3441
Array.isArray(sequences) && sequences.length
3542
? sequences
3643
: Object.values(animationsRef.current);
3744
const localAnimationState = {};
3845

3946
(play ? sequencesToAnimate : [...sequencesToAnimate].reverse()).reduce(
40-
(previous, current, currentIndex) => {
41-
const { sequenceId, sequenceIndex, ...restAttributes } = current;
42-
const { duration: defaultDuration, delay, overlay } = restAttributes;
47+
(
48+
previous,
49+
{
50+
sequenceId,
51+
sequenceIndex,
52+
duration = DEFAULT_DURATION,
53+
delay,
54+
overlay,
55+
},
56+
currentIndex,
57+
) => {
4358
const id = getSequenceId(sequenceIndex, sequenceId, currentIndex);
44-
const duration = defaultDuration || 0.3;
4559
const currentTotalDuration = calculateTotalDuration({
4660
duration,
4761
delay,
4862
overlay,
4963
});
50-
5164
const totalDuration = currentTotalDuration + previous;
5265

5366
localAnimationState[id] = {
@@ -68,6 +81,7 @@ export default function AnimateGroup(props: Props) {
6881
);
6982

7083
setAnimationStates(localAnimationState);
84+
// eslint-disable-next-line react-hooks/exhaustive-deps
7185
}, [play]);
7286

7387
return (

‎src/animateKeyframes.tsx

+31-25
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ import deleteRule from './logic/deleteRules';
55
import createRandomName from './utils/createRandomName';
66
import getSequenceId from './utils/getSequenceId';
77
import getPlayState from './utils/getPauseState';
8+
import {
9+
DEFAULT_DIRECTION,
10+
DEFAULT_DURATION,
11+
DEFAULT_EASE_TYPE,
12+
DEFAULT_FILLMODE,
13+
} from './constants';
814
import { AnimateKeyframesProps } from './types';
915

1016
export default function AnimateKeyframes(props: AnimateKeyframesProps) {
@@ -13,11 +19,11 @@ export default function AnimateKeyframes(props: AnimateKeyframesProps) {
1319
play = false,
1420
pause = false,
1521
render,
16-
duration = 0.3,
22+
duration = DEFAULT_DURATION,
1723
delay = 0,
18-
easeType = 'linear',
19-
direction = 'normal',
20-
fillMode = 'none',
24+
easeType = DEFAULT_EASE_TYPE,
25+
direction = DEFAULT_DIRECTION,
26+
fillMode = DEFAULT_FILLMODE,
2127
iterationCount = 1,
2228
sequenceIndex,
2329
keyframes,
@@ -35,56 +41,56 @@ export default function AnimateKeyframes(props: AnimateKeyframesProps) {
3541
});
3642
const id = getSequenceId(sequenceIndex, sequenceId);
3743
const { register, animationStates = {} } = React.useContext(AnimateContext);
44+
const animateState = animationStates[id] || {};
3845
const [, forceUpdate] = React.useState(false);
3946

4047
React.useEffect(() => {
48+
const styleTag = styleTagRef.current;
49+
const animationName = animationNameRef.current;
4150
animationNameRef.current.forward = createRandomName();
4251
let result = createTag({
4352
animationName: animationNameRef.current.forward,
4453
keyframes,
4554
});
46-
styleTagRef.current.forward = result.styleTag;
4755

4856
animationNameRef.current.reverse = createRandomName();
57+
styleTagRef.current.forward = result.styleTag;
4958
result = createTag({
5059
animationName: animationNameRef.current.reverse,
5160
keyframes: keyframes.reverse(),
5261
});
5362
styleTagRef.current.reverse = result.styleTag;
63+
5464
register(props);
5565

56-
if (play) forceUpdate(true);
66+
if (play) {
67+
forceUpdate(true);
68+
}
5769

5870
return () => {
59-
deleteRule(
60-
styleTagRef.current.forward.sheet,
61-
animationNameRef.current.forward,
62-
);
63-
deleteRule(
64-
styleTagRef.current.reverse.sheet,
65-
animationNameRef.current.reverse,
66-
);
71+
deleteRule(styleTag.forward.sheet, animationName.forward);
72+
deleteRule(styleTag.reverse.sheet, animationName.reverse);
6773
};
74+
// eslint-disable-next-line react-hooks/exhaustive-deps
6875
}, []);
6976

70-
const animateState = animationStates[id] || {};
71-
7277
if (animateState.controlled && !controlled.current) {
7378
pauseValue = animateState.pause;
74-
if (!animateState.pause) controlled.current = true;
79+
if (!animateState.pause) {
80+
controlled.current = true;
81+
}
7582
} else {
7683
pauseValue = pause;
7784
}
7885

7986
const style = {
80-
animation: `${duration}s ${easeType} ${animateState.delay ||
81-
delay}s ${iterationCount} ${direction} ${fillMode} ${getPlayState(
82-
pauseValue,
83-
)} ${((animateState.controlled
84-
? animateState.play
85-
: play)
86-
? animationNameRef.current.forward
87-
: animationNameRef.current.reverse) || ''}`,
87+
animation: `${duration}s ${easeType} ${
88+
animateState.delay || delay
89+
}s ${iterationCount} ${direction} ${fillMode} ${getPlayState(pauseValue)} ${
90+
((animateState.controlled ? animateState.play : play)
91+
? animationNameRef.current.forward
92+
: animationNameRef.current.reverse) || ''
93+
}`,
8894
};
8995

9096
return render ? render({ style }) : <div style={style || {}}>{children}</div>;

‎src/constants/index.ts

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const DEFAULT_DURATION = 0.3;
2+
const DEFAULT_EASE_TYPE = 'linear';
3+
const DEFAULT_DIRECTION = 'normal';
4+
const DEFAULT_FILLMODE = 'none';
5+
const RUNNING = 'running';
6+
const ALL = 'all';
7+
8+
export {
9+
DEFAULT_DURATION,
10+
DEFAULT_EASE_TYPE,
11+
DEFAULT_DIRECTION,
12+
DEFAULT_FILLMODE,
13+
RUNNING,
14+
ALL,
15+
};

‎src/logic/deleteRules.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@ export default (sheet: any, deleteName: string): void => {
22
const index = Object.values(sheet.cssRules).findIndex(
33
({ name }: { name: string }) => name === deleteName,
44
);
5-
if (index >= 0) sheet.deleteRule(index);
5+
if (index >= 0) {
6+
sheet.deleteRule(index);
7+
}
68
};

‎src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export type HookSequences = {
2525
keyframes?: Keyframes;
2626
direction?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
2727
fillMode?: 'none' | 'forwards' | 'backwards' | 'both';
28-
iterationCount?: string | number;
28+
iterationCount?: number;
2929
start?: Style;
3030
end?: Style;
3131
overlay?: number;

‎src/useAnimate.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as React from 'react';
22
import secToMs from './utils/secToMs';
33
import { AnimationProps, Style } from './types';
4+
import { ALL, DEFAULT_DURATION, DEFAULT_EASE_TYPE } from './constants';
45

56
export default function useAnimate(
67
props: AnimationProps,
@@ -15,11 +16,11 @@ export default function useAnimate(
1516
complete,
1617
onComplete,
1718
delay = 0,
18-
duration = 0.3,
19-
easeType = 'linear',
19+
duration = DEFAULT_DURATION,
20+
easeType = DEFAULT_EASE_TYPE,
2021
} = props;
2122
const transition = React.useMemo(
22-
() => `all ${duration}s ${easeType} ${delay}s`,
23+
() => `${ALL} ${duration}s ${easeType} ${delay}s`,
2324
[duration, easeType, delay],
2425
);
2526
const [style, setStyle] = React.useState<Style>({ ...start, transition });

‎src/useAnimateGroup.ts

+21-8
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ import calculateTotalDuration from './utils/calculateTotalDuration';
55
import createTag from './logic/createTag';
66
import deleteRules from './logic/deleteRules';
77
import { HookSequences, Style } from './types';
8+
import {
9+
ALL,
10+
DEFAULT_DIRECTION,
11+
DEFAULT_DURATION,
12+
DEFAULT_EASE_TYPE,
13+
DEFAULT_FILLMODE,
14+
RUNNING,
15+
} from './constants';
816

917
interface Props {
1018
sequences: HookSequences;
@@ -29,7 +37,9 @@ export default function useAnimateGroup(
2937

3038
React.useEffect(() => {
3139
sequences.forEach(({ keyframes = false }, i): void => {
32-
if (!Array.isArray(keyframes)) return;
40+
if (!Array.isArray(keyframes)) {
41+
return;
42+
}
3343

3444
if (!animationNamesRef.current[i]) {
3545
animationNamesRef.current[i] = {} as any;
@@ -54,11 +64,14 @@ export default function useAnimateGroup(
5464
return () =>
5565
Object.values(animationNamesRef).forEach(
5666
({ forward, reverse }, i): void => {
57-
if (!styleTagRef[i]) return;
67+
if (!styleTagRef[i]) {
68+
return;
69+
}
5870
deleteRules(styleTagRef[i].sheet, forward);
5971
deleteRules(styleTagRef[i].sheet, reverse);
6072
},
6173
);
74+
// eslint-disable-next-line react-hooks/exhaustive-deps
6275
}, []);
6376

6477
playRef.current = playRef.current
@@ -71,26 +84,26 @@ export default function useAnimateGroup(
7184
const styles = (isPlay ? sequences : [...sequences].reverse()).map(
7285
(current, currentIndex): Style => {
7386
const {
74-
duration = 0.3,
87+
duration = DEFAULT_DURATION,
7588
delay = 0,
7689
overlay,
7790
keyframes,
7891
iterationCount = 1,
79-
easeType = 'linear',
80-
direction = 'normal',
81-
fillMode = 'none',
92+
easeType = DEFAULT_EASE_TYPE,
93+
direction = DEFAULT_DIRECTION,
94+
fillMode = DEFAULT_FILLMODE,
8295
end = {},
8396
start = {},
8497
} = current;
8598
const delayDuration = currentIndex === 0 ? delay : totalDuration;
86-
const transition = `all ${duration}s ${easeType} ${delayDuration}s`;
99+
const transition = `${ALL} ${duration}s ${easeType} ${delayDuration}s`;
87100
totalDuration =
88101
calculateTotalDuration({ duration, delay, overlay }) +
89102
totalDuration;
90103

91104
return keyframes
92105
? {
93-
animation: `${duration}s ${easeType} ${delayDuration}s ${iterationCount} ${direction} ${fillMode} running ${
106+
animation: `${duration}s ${easeType} ${delayDuration}s ${iterationCount} ${direction} ${fillMode} ${RUNNING} ${
94107
isPlay
95108
? animationRefWithOrder[currentIndex].forward
96109
: animationRefWithOrder[currentIndex].reverse

‎src/useAnimateKeyframes.ts

+21-15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ import { AnimateContext } from './animateGroup';
55
import deleteRules from './logic/deleteRules';
66
import { AnimateKeyframesProps, Style } from './types';
77
import getPlayState from './utils/getPauseState';
8+
import {
9+
DEFAULT_DIRECTION,
10+
DEFAULT_DURATION,
11+
DEFAULT_EASE_TYPE,
12+
DEFAULT_FILLMODE,
13+
} from './constants';
814

915
export default function useAnimateKeyframes(
1016
props: AnimateKeyframesProps,
@@ -15,11 +21,11 @@ export default function useAnimateKeyframes(
1521
isPlaying: boolean;
1622
} {
1723
const {
18-
duration = 0.3,
24+
duration = DEFAULT_DURATION,
1925
delay = 0,
20-
easeType = 'linear',
21-
direction = 'normal',
22-
fillMode = 'none',
26+
easeType = DEFAULT_EASE_TYPE,
27+
direction = DEFAULT_DIRECTION,
28+
fillMode = DEFAULT_FILLMODE,
2329
iterationCount = 1,
2430
keyframes,
2531
} = props;
@@ -37,6 +43,9 @@ export default function useAnimateKeyframes(
3743
const playRef = React.useRef<(isPlay: boolean) => void>();
3844

3945
React.useEffect(() => {
46+
const styleTag = styleTagRef.current;
47+
const animationName = animationNameRef.current;
48+
4049
animationNameRef.current.forward = createRandomName();
4150
let result = createTag({
4251
animationName: animationNameRef.current.forward,
@@ -53,15 +62,10 @@ export default function useAnimateKeyframes(
5362
register(props);
5463

5564
return () => {
56-
deleteRules(
57-
styleTagRef.current.forward.sheet,
58-
animationNameRef.current.forward,
59-
);
60-
deleteRules(
61-
styleTagRef.current.reverse.sheet,
62-
animationNameRef.current.reverse,
63-
);
65+
deleteRules(styleTag.forward.sheet, animationName.forward);
66+
deleteRules(styleTag.reverse.sheet, animationName.reverse);
6467
};
68+
// eslint-disable-next-line react-hooks/exhaustive-deps
6569
}, []);
6670

6771
playRef.current = playRef.current
@@ -71,9 +75,11 @@ export default function useAnimateKeyframes(
7175
const style = {
7276
animation: `${duration}s ${easeType} ${delay}s ${iterationCount} ${direction} ${fillMode} ${getPlayState(
7377
isPaused,
74-
)} ${(isPlaying
75-
? animationNameRef.current.forward
76-
: animationNameRef.current.reverse) || ''}`,
78+
)} ${
79+
(isPlaying
80+
? animationNameRef.current.forward
81+
: animationNameRef.current.reverse) || ''
82+
}`,
7783
};
7884

7985
return {

‎src/utils/getPauseState.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
export default (pause: boolean): string => pause ? 'paused' : 'running';
1+
import { RUNNING } from '../constants';
2+
3+
export default (pause: boolean): string => (pause ? 'paused' : RUNNING);

‎src/utils/getSequenceId.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
import isUndefined from './isUndefined';
22

33
export default function getSequenceId(
4-
sequenceIndex: number | undefined,
5-
sequenceId: string | number | undefined,
4+
sequenceIndex?: number,
5+
sequenceId?: string | number,
66
defaultValue?: string | number,
7-
) {
8-
if (isUndefined(sequenceId) && isUndefined(sequenceIndex))
7+
): number | string {
8+
if (isUndefined(sequenceId) && isUndefined(sequenceIndex)) {
99
return defaultValue || 0;
10+
}
1011

11-
if (sequenceIndex && sequenceIndex >= 0) return sequenceIndex;
12+
if (sequenceIndex && sequenceIndex >= 0) {
13+
return sequenceIndex;
14+
}
1215

13-
if (sequenceId) return sequenceId;
16+
if (sequenceId) {
17+
return sequenceId;
18+
}
1419

1520
return 0;
1621
}

‎yarn.lock

+141-31
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,14 @@
308308
dependencies:
309309
"@babel/helper-plugin-utils" "^7.8.0"
310310

311+
"@babel/runtime-corejs3@^7.8.3":
312+
version "7.9.6"
313+
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71"
314+
integrity sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==
315+
dependencies:
316+
core-js-pure "^3.0.0"
317+
regenerator-runtime "^0.13.4"
318+
311319
"@babel/template@^7.1.0", "@babel/template@^7.4.4":
312320
version "7.4.4"
313321
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
@@ -796,40 +804,41 @@
796804
dependencies:
797805
"@types/yargs-parser" "*"
798806

799-
"@typescript-eslint/eslint-plugin@^2.34.0":
800-
version "2.34.0"
801-
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9"
802-
integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==
807+
"@typescript-eslint/eslint-plugin@^3.0.0":
808+
version "3.0.0"
809+
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.0.0.tgz#02f8ec6b5ce814bda80dfc22463f108bed1f699b"
810+
integrity sha512-lcZ0M6jD4cqGccYOERKdMtg+VWpoq3NSnWVxpc/AwAy0zhkUYVioOUZmfNqiNH8/eBNGhCn6HXd6mKIGRgNc1Q==
803811
dependencies:
804-
"@typescript-eslint/experimental-utils" "2.34.0"
812+
"@typescript-eslint/experimental-utils" "3.0.0"
805813
functional-red-black-tree "^1.0.1"
806814
regexpp "^3.0.0"
815+
semver "^7.3.2"
807816
tsutils "^3.17.1"
808817

809-
"@typescript-eslint/experimental-utils@2.34.0":
810-
version "2.34.0"
811-
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
812-
integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
818+
"@typescript-eslint/experimental-utils@3.0.0":
819+
version "3.0.0"
820+
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.0.0.tgz#1ddf53eeb61ac8eaa9a77072722790ac4f641c03"
821+
integrity sha512-BN0vmr9N79M9s2ctITtChRuP1+Dls0x/wlg0RXW1yQ7WJKPurg6X3Xirv61J2sjPif4F8SLsFMs5Nzte0WYoTQ==
813822
dependencies:
814823
"@types/json-schema" "^7.0.3"
815-
"@typescript-eslint/typescript-estree" "2.34.0"
824+
"@typescript-eslint/typescript-estree" "3.0.0"
816825
eslint-scope "^5.0.0"
817826
eslint-utils "^2.0.0"
818827

819-
"@typescript-eslint/parser@^2.34.0":
820-
version "2.34.0"
821-
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8"
822-
integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==
828+
"@typescript-eslint/parser@^3.0.0":
829+
version "3.0.0"
830+
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.0.0.tgz#fe9fdf18a1155c02c04220c14506a320cb6c6944"
831+
integrity sha512-8RRCA9KLxoFNO0mQlrLZA0reGPd/MsobxZS/yPFj+0/XgMdS8+mO8mF3BDj2ZYQj03rkayhSJtF1HAohQ3iylw==
823832
dependencies:
824833
"@types/eslint-visitor-keys" "^1.0.0"
825-
"@typescript-eslint/experimental-utils" "2.34.0"
826-
"@typescript-eslint/typescript-estree" "2.34.0"
834+
"@typescript-eslint/experimental-utils" "3.0.0"
835+
"@typescript-eslint/typescript-estree" "3.0.0"
827836
eslint-visitor-keys "^1.1.0"
828837

829-
"@typescript-eslint/typescript-estree@2.34.0":
830-
version "2.34.0"
831-
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
832-
integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
838+
"@typescript-eslint/typescript-estree@3.0.0":
839+
version "3.0.0"
840+
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.0.0.tgz#fa40e1b76ccff880130be054d9c398e96004bf42"
841+
integrity sha512-nevQvHyNghsfLrrByzVIH4ZG3NROgJ8LZlfh3ddwPPH4CH7W4GAiSx5qu+xHuX5pWsq6q/eqMc1io840ZhAnUg==
833842
dependencies:
834843
debug "^4.1.1"
835844
eslint-visitor-keys "^1.1.0"
@@ -1011,6 +1020,15 @@ array-filter@~0.0.0:
10111020
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
10121021
integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
10131022

1023+
array-includes@^3.0.3, array-includes@^3.1.1:
1024+
version "3.1.1"
1025+
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
1026+
integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
1027+
dependencies:
1028+
define-properties "^1.1.3"
1029+
es-abstract "^1.17.0"
1030+
is-string "^1.0.5"
1031+
10141032
array-map@~0.0.0:
10151033
version "0.0.0"
10161034
resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
@@ -1348,7 +1366,7 @@ cli-cursor@^3.1.0:
13481366
dependencies:
13491367
restore-cursor "^3.1.0"
13501368

1351-
cli-truncate@^2.1.0:
1369+
cli-truncate@2.1.0, cli-truncate@^2.1.0:
13521370
version "2.1.0"
13531371
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
13541372
integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
@@ -1478,6 +1496,11 @@ copy-descriptor@^0.1.0:
14781496
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
14791497
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
14801498

1499+
core-js-pure@^3.0.0:
1500+
version "3.6.5"
1501+
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
1502+
integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
1503+
14811504
core-util-is@1.0.2:
14821505
version "1.0.2"
14831506
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -1691,6 +1714,13 @@ discontinuous-range@1.0.0:
16911714
resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
16921715
integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=
16931716

1717+
doctrine@^2.1.0:
1718+
version "2.1.0"
1719+
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
1720+
integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
1721+
dependencies:
1722+
esutils "^2.0.2"
1723+
16941724
doctrine@^3.0.0:
16951725
version "3.0.0"
16961726
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
@@ -1883,7 +1913,7 @@ es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.4.3:
18831913
is-regex "^1.0.4"
18841914
object-keys "^1.0.12"
18851915

1886-
es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
1916+
es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
18871917
version "1.17.5"
18881918
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
18891919
integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
@@ -1940,6 +1970,28 @@ escodegen@^1.14.1:
19401970
optionalDependencies:
19411971
source-map "~0.6.1"
19421972

1973+
eslint-plugin-react-hooks@^4.0.2:
1974+
version "4.0.2"
1975+
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.2.tgz#03700ca761eacc1b6436074c456f90a8e331ff28"
1976+
integrity sha512-kAMRjNztrLW1rK+81X1NwMB2LqG+nc7Q8AibnG8/VyWhQK8SP6JotCFG+HL4u1EjziplxVz4jARdR8gGk8pLDA==
1977+
1978+
eslint-plugin-react@^7.20.0:
1979+
version "7.20.0"
1980+
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3"
1981+
integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==
1982+
dependencies:
1983+
array-includes "^3.1.1"
1984+
doctrine "^2.1.0"
1985+
has "^1.0.3"
1986+
jsx-ast-utils "^2.2.3"
1987+
object.entries "^1.1.1"
1988+
object.fromentries "^2.0.2"
1989+
object.values "^1.1.1"
1990+
prop-types "^15.7.2"
1991+
resolve "^1.15.1"
1992+
string.prototype.matchall "^4.0.2"
1993+
xregexp "^4.3.0"
1994+
19431995
eslint-scope@^5.0.0:
19441996
version "5.0.0"
19451997
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
@@ -2675,6 +2727,15 @@ inquirer@^7.0.0:
26752727
strip-ansi "^6.0.0"
26762728
through "^2.3.6"
26772729

2730+
internal-slot@^1.0.2:
2731+
version "1.0.2"
2732+
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3"
2733+
integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==
2734+
dependencies:
2735+
es-abstract "^1.17.0-next.1"
2736+
has "^1.0.3"
2737+
side-channel "^1.0.2"
2738+
26782739
ip-regex@^2.1.0:
26792740
version "2.1.0"
26802741
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
@@ -3463,6 +3524,14 @@ jsprim@^1.2.2:
34633524
json-schema "0.2.3"
34643525
verror "1.10.0"
34653526

3527+
jsx-ast-utils@^2.2.3:
3528+
version "2.2.3"
3529+
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
3530+
integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==
3531+
dependencies:
3532+
array-includes "^3.0.3"
3533+
object.assign "^4.1.0"
3534+
34663535
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
34673536
version "3.2.2"
34683537
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@@ -3523,12 +3592,13 @@ lines-and-columns@^1.1.6:
35233592
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
35243593
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
35253594

3526-
lint-staged@^10.2.4:
3527-
version "10.2.4"
3528-
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.4.tgz#0ed5d1cf06bdac0d3fbb003931bb6df3771fbf42"
3529-
integrity sha512-doTMGKXQAT34c3S3gwDrTnXmCZp/z1/92D8suPqqh755sKPT18ew1NoPNHxJdrvv1D4WrJ7CEnx79Ns3EdEFbg==
3595+
lint-staged@^10.2.6:
3596+
version "10.2.6"
3597+
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.6.tgz#7d9658bd89dee946a859cbfc6e09566a9fb50b53"
3598+
integrity sha512-2oEBWyPZHkdyjKcIv2U6ay80Q52ZMlZZrUnfsV0WTVcgzPlt3o2t5UFy2v8ETUTsIDZ0xSJVnffWCgD3LF6xTQ==
35303599
dependencies:
35313600
chalk "^4.0.0"
3601+
cli-truncate "2.1.0"
35323602
commander "^5.1.0"
35333603
cosmiconfig "^6.0.0"
35343604
debug "^4.1.1"
@@ -4450,6 +4520,11 @@ reflect.ownkeys@^0.2.0:
44504520
resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460"
44514521
integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=
44524522

4523+
regenerator-runtime@^0.13.4:
4524+
version "0.13.5"
4525+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
4526+
integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
4527+
44534528
regex-not@^1.0.0, regex-not@^1.0.2:
44544529
version "1.0.2"
44554530
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
@@ -4458,6 +4533,14 @@ regex-not@^1.0.0, regex-not@^1.0.2:
44584533
extend-shallow "^3.0.2"
44594534
safe-regex "^1.1.0"
44604535

4536+
regexp.prototype.flags@^1.3.0:
4537+
version "1.3.0"
4538+
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75"
4539+
integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==
4540+
dependencies:
4541+
define-properties "^1.1.3"
4542+
es-abstract "^1.17.0-next.1"
4543+
44614544
regexpp@^3.0.0, regexpp@^3.1.0:
44624545
version "3.1.0"
44634546
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
@@ -4592,7 +4675,7 @@ resolve@^1.10.0, resolve@^1.3.2:
45924675
dependencies:
45934676
path-parse "^1.0.6"
45944677

4595-
resolve@^1.17.0:
4678+
resolve@^1.15.1, resolve@^1.17.0:
45964679
version "1.17.0"
45974680
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
45984681
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
@@ -4637,10 +4720,10 @@ rollup-plugin-typescript2@^0.27.1:
46374720
resolve "1.15.1"
46384721
tslib "1.11.2"
46394722

4640-
rollup@^2.10.5:
4641-
version "2.10.5"
4642-
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.10.5.tgz#a2e6735fbcbd64453f8aa5d7b5ec1b421974f92c"
4643-
integrity sha512-05WRM/tjmPYwhOBvm/G9Qwa/HnAqn0TK0XxLDLQzoM4XdSmKjPBvhBl+U+Q/C6VJsucljyTQjGkZD503mjbPQg==
4723+
rollup@^2.10.7:
4724+
version "2.10.7"
4725+
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.10.7.tgz#7d1a9fa8de146615a098836480df6f8b31c2f058"
4726+
integrity sha512-rofUSH2i4GymWhQq6bfRaSiVbz4LEB4h/7+AhuXCaeOSwQqClD0hINjs59j8SyfQwcqe83NcVJAY2kjp0h33bQ==
46444727
optionalDependencies:
46454728
fsevents "~2.1.2"
46464729

@@ -4808,6 +4891,14 @@ shellwords@^0.1.1:
48084891
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
48094892
integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
48104893

4894+
side-channel@^1.0.2:
4895+
version "1.0.2"
4896+
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
4897+
integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
4898+
dependencies:
4899+
es-abstract "^1.17.0-next.1"
4900+
object-inspect "^1.7.0"
4901+
48114902
signal-exit@^3.0.0, signal-exit@^3.0.2:
48124903
version "3.0.2"
48134904
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
@@ -5023,6 +5114,18 @@ string-width@^4.1.0, string-width@^4.2.0:
50235114
is-fullwidth-code-point "^3.0.0"
50245115
strip-ansi "^6.0.0"
50255116

5117+
string.prototype.matchall@^4.0.2:
5118+
version "4.0.2"
5119+
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e"
5120+
integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==
5121+
dependencies:
5122+
define-properties "^1.1.3"
5123+
es-abstract "^1.17.0"
5124+
has-symbols "^1.0.1"
5125+
internal-slot "^1.0.2"
5126+
regexp.prototype.flags "^1.3.0"
5127+
side-channel "^1.0.2"
5128+
50265129
string.prototype.padend@^3.0.0:
50275130
version "3.0.0"
50285131
resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0"
@@ -5609,6 +5712,13 @@ xmlchars@^2.2.0:
56095712
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
56105713
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
56115714

5715+
xregexp@^4.3.0:
5716+
version "4.3.0"
5717+
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
5718+
integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==
5719+
dependencies:
5720+
"@babel/runtime-corejs3" "^7.8.3"
5721+
56125722
y18n@^4.0.0:
56135723
version "4.0.0"
56145724
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"

0 commit comments

Comments
 (0)
Please sign in to comment.