diff --git a/package.json b/package.json index e2ae47e1c..bee8b07cb 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "@emotion/styled": "^10.0.14", "@material-ui/core": "^4.2.1", "color": "^3.1.2", - "luxon": "^1.17.1", + "luxon": "^1.17.2", "next": "9.0.2", "react": "^16.8.6", "react-dom": "^16.8.6", @@ -47,12 +47,12 @@ "@types/material-ui": "^0.21.6", "@types/node": "^12.6.8", "@types/nprogress": "^0.2.0", - "@types/prettier": "^1.16.4", + "@types/prettier": "^1.18.0", "@types/react": "^16.8.23", - "@types/react-dom": "^16.8.4", + "@types/react-dom": "^16.8.5", "@types/smoothscroll-polyfill": "^0.3.1", - "@typescript-eslint/eslint-plugin": "^1.12.0", - "@typescript-eslint/parser": "^1.12.0", + "@typescript-eslint/eslint-plugin": "^1.13.0", + "@typescript-eslint/parser": "^1.13.0", "babel-eslint": "^10.0.1", "babel-plugin-emotion": "^10.0.14", "concurrently": "^4.1.1", @@ -60,10 +60,10 @@ "eslint-config-prettier": "^6.0.0", "eslint-config-react-app": "^4.0.1", "eslint-plugin-flowtype": "^2.x", - "eslint-plugin-import": "^2.18.0", + "eslint-plugin-import": "^2.18.2", "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-prettier": "^3.1.0", - "eslint-plugin-react": "^7.14.2", + "eslint-plugin-react": "^7.14.3", "eslint-plugin-react-hooks": "^1.6.1", "fs-extra": "^8.1.0", "glob": "^7.1.4", diff --git a/scripts/lib/stepExpressionContainer.ts b/scripts/lib/stepExpressionContainer.ts index 96b093308..e4364296f 100644 --- a/scripts/lib/stepExpressionContainer.ts +++ b/scripts/lib/stepExpressionContainer.ts @@ -11,7 +11,8 @@ import { isCall, isExecutableCallRegular, isVariableShorthandUnaryNumber, - isExecutableCallMagical + isExecutableCallMagical, + isExecutableCallBinary } from 'src/lib/expressionTypeGuards' import replaceFuncParentKey from 'scripts/lib/replaceFuncParentKey' import { @@ -31,6 +32,7 @@ import { stepToCaseProcessed, stepToCaseOnly, stepToMagicalExpanded, + stepToShorthandComputed, stepToDefault, stepToShowExecutableUnary, stepToUnaryProcessed, @@ -46,7 +48,8 @@ import { ExecutableConditionalStatesDistributed, ExecutableCall, ExecutableCallMagical, - ExecutableCallBinary + ExecutableCallBinary, + ExecutableCallShorthand } from 'src/types/ExpressionTypes' import prioritizeExpression from 'scripts/lib/prioritizeExpression' @@ -178,6 +181,32 @@ const stepMagical = ( } } +const stepShorthand = ( + e: ExecutableCallShorthand +): { + nextExpression: ExecutableCall | StepChild<'default'> + matchExists?: boolean + previouslyChangedExpressionState: ExpressionContainer['previouslyChangedExpressionState'] +} => { + switch (e.state) { + case 'default': { + return { + nextExpression: stepToActive(e), + previouslyChangedExpressionState: 'active' + } + } + case 'active': { + return { + nextExpression: stepToShorthandComputed(e), + previouslyChangedExpressionState: 'default' + } + } + default: { + throw new Error() + } + } +} + const stepRegular = ( e: ExecutableCallRegular, { showAllShowSteps, skipAlphaConvert }: StepOptions, @@ -369,7 +398,9 @@ const runStep = ( ? stepRegular(expression, stepOptions, e.matchExists) : isExecutableCallMagical(expression) ? stepMagical(expression) - : stepBinary(expression) + : isExecutableCallBinary(expression) + ? stepBinary(expression) + : stepShorthand(expression) : stepConditional(expression) if (!callParent && !callParentKey && !funcParent && !conditionalParent) { diff --git a/scripts/lib/steps/index.ts b/scripts/lib/steps/index.ts index 86965cf6b..70b9c83a3 100644 --- a/scripts/lib/steps/index.ts +++ b/scripts/lib/steps/index.ts @@ -51,3 +51,6 @@ export { export { default as stepToBinaryComputed } from 'scripts/lib/steps/stepToBinaryComputed' +export { + default as stepToShorthandComputed +} from 'scripts/lib/steps/stepToShorthandComputed' diff --git a/scripts/lib/steps/stepToActive.ts b/scripts/lib/steps/stepToActive.ts index 60184dab1..8db873d30 100644 --- a/scripts/lib/steps/stepToActive.ts +++ b/scripts/lib/steps/stepToActive.ts @@ -4,7 +4,8 @@ import { isExecutableCallRegular, isCall, isExecutableCallBinary, - isConditional + isConditional, + isExecutableCallShorthand } from 'src/lib/expressionTypeGuards' import { CallExpression, @@ -27,13 +28,18 @@ import { MagicalVariable, StepMagicalVariable, ExecutableStepCallMagical, - ExecutableStepCallBinary + ExecutableStepCallBinary, + ExecutableCallShorthand, + ExecutableStepCallShorthand, + VariableShorthandFunc, + StepVariableShorthandFunc } from 'src/types/ExpressionTypes' function toActive( e: VariableShorthandBinary ): StepVariableShorthandBinary<'active'> function toActive(e: MagicalVariable): StepMagicalVariable<'active'> +function toActive(e: VariableShorthandFunc): StepVariableShorthandFunc<'active'> function toActive(e: VariableExpression): StepVariable<'active'> function toActive(e: FunctionExpression): StepFunction<'active'> function toActive(e: ConditionalExpression): StepConditional<'active'> @@ -129,11 +135,19 @@ export default function stepToActive( e: ExecutableCallBinary ): ExecutableStepCallBinary<'active'> export default function stepToActive( - e: ExecutableCallRegular | ExecutableCallMagical | ExecutableCallBinary + e: ExecutableCallShorthand +): ExecutableStepCallShorthand<'active'> +export default function stepToActive( + e: + | ExecutableCallRegular + | ExecutableCallMagical + | ExecutableCallBinary + | ExecutableCallShorthand ): | ExecutableStepCallRegular<'active'> | ExecutableStepCallMagical<'active'> - | ExecutableStepCallBinary<'active'> { + | ExecutableStepCallBinary<'active'> + | ExecutableStepCallShorthand<'active'> { if (isExecutableCallBinary(e)) { return { ...e, @@ -162,6 +176,25 @@ export default function stepToActive( emphasizePriority: true } } + } else if (isExecutableCallShorthand(e)) { + return { + ...e, + state: 'active', + arg: { + ...e.arg, + topLeftBadgeType: 'none', + bottomRightBadgeType: 'none', + highlightType: 'active', + emphasizePriority: true + }, + func: { + ...e.func, + topLeftBadgeType: 'none', + bottomRightBadgeType: 'none', + highlightType: 'active', + emphasizePriority: true + } + } } else { const arg = isFunction(e.arg) ? toExecutableActiveFunction(e.arg) diff --git a/scripts/lib/steps/stepToShorthandComputed.ts b/scripts/lib/steps/stepToShorthandComputed.ts new file mode 100644 index 000000000..0f47b743a --- /dev/null +++ b/scripts/lib/steps/stepToShorthandComputed.ts @@ -0,0 +1,17 @@ +import { + ExecutableCallShorthand, + VariableShorthandNumber, + StepVariableShorthandNumber +} from 'src/types/ExpressionTypes' +import toDefault from 'scripts/lib/toDefault' + +export default function stepToShorthandComputed( + e: ExecutableCallShorthand +): StepVariableShorthandNumber<'default'> { + const result: VariableShorthandNumber = { + ...e.arg, + shorthandNumber: + e.arg.shorthandNumber + (e.func.shorthandFunc === 'add' ? 1 : -1) + } + return toDefault(result) +} diff --git a/scripts/lib/toDefault.ts b/scripts/lib/toDefault.ts index 8bc59c76d..4b9c3b429 100644 --- a/scripts/lib/toDefault.ts +++ b/scripts/lib/toDefault.ts @@ -12,9 +12,14 @@ import { StepChild, StepFunction, StepVariable, - VariableExpression + VariableExpression, + VariableShorthandNumber, + StepVariableShorthandNumber } from 'src/types/ExpressionTypes' +export default function toDefault( + e: VariableShorthandNumber +): StepVariableShorthandNumber<'default'> export default function toDefault( e: VariableExpression ): StepVariable<'default'> diff --git a/src/components/MinusOne.tsx b/src/components/MinusOne.tsx new file mode 100644 index 000000000..bfd3949a3 --- /dev/null +++ b/src/components/MinusOne.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import MinusOneSvg from 'src/components/MinusOneSvg' +import Emoji, { EmojiProps } from 'src/components/Emoji' + +const MinusOne = (emojiProps: EmojiProps) => ( + } /> +) + +MinusOne.defaultProps = Emoji.defaultProps + +export default MinusOne diff --git a/src/components/MinusOneSvg.tsx b/src/components/MinusOneSvg.tsx new file mode 100644 index 000000000..545513560 --- /dev/null +++ b/src/components/MinusOneSvg.tsx @@ -0,0 +1,27 @@ +import * as React from 'react' + +const MinusOneSvg = (props: React.SVGProps) => ( + + + + + + + + + + + +) + +export default MinusOneSvg diff --git a/src/components/PlusOne.tsx b/src/components/PlusOne.tsx new file mode 100644 index 000000000..2feb26390 --- /dev/null +++ b/src/components/PlusOne.tsx @@ -0,0 +1,11 @@ +import React from 'react' +import PlusOneSvg from 'src/components/PlusOneSvg' +import Emoji, { EmojiProps } from 'src/components/Emoji' + +const PlusOne = (emojiProps: EmojiProps) => ( + } /> +) + +PlusOne.defaultProps = Emoji.defaultProps + +export default PlusOne diff --git a/src/components/PlusOneSvg.tsx b/src/components/PlusOneSvg.tsx new file mode 100644 index 000000000..5054f3125 --- /dev/null +++ b/src/components/PlusOneSvg.tsx @@ -0,0 +1,23 @@ +import * as React from 'react' + +const PlusOneSvg = (props: React.SVGProps) => ( + + + + + + + + + + + +) + +export default PlusOneSvg diff --git a/src/components/VariableExpressionBox.tsx b/src/components/VariableExpressionBox.tsx index 1f17e9a32..134b5b9e4 100644 --- a/src/components/VariableExpressionBox.tsx +++ b/src/components/VariableExpressionBox.tsx @@ -16,6 +16,8 @@ import { VariableExpression } from 'src/types/ExpressionTypes' import H from 'src/components/H' import { ExpressionRunnerContextProps } from 'src/types/ExpressionRunnerTypes' import BlankNumber from 'src/components/BlankNumber' +import PlusOne from 'src/components/PlusOne' +import MinusOne from 'src/components/MinusOne' interface VariableExpressionBoxProps { expression: VariableExpression @@ -175,6 +177,18 @@ const VariableEmoji = ({ expression }: VariableExpressionBoxProps) => { ) + } else if (expression.shorthandFunc === 'add') { + return ( +
+ +
+ ) + } else if (expression.shorthandFunc === 'pred') { + return ( +
+ +
+ ) } else { return ( ( @@ -59,6 +61,12 @@ export function isVariableShorthandBinary< return isVariable(expression) && expression.shorthandBinary !== undefined } +export function isVariableShorthandFunc< + V extends VariableShorthandFunc = VariableShorthandFunc +>(expression: Expression): expression is V { + return isVariable(expression) && expression.shorthandFunc !== undefined +} + export function isVariableShorthandUnaryNumber< V extends VariableShorthandUnaryNumber = VariableShorthandUnaryNumber >(expression: Expression): expression is V { @@ -97,6 +105,15 @@ export function isExecutableCallBinary( ) } +export function isExecutableCallShorthand( + expression: CallExpression +): expression is E { + return ( + isVariableShorthandFunc(expression.func) && + isVariableShorthandNumber(expression.arg) + ) +} + export function isExecutableCall( expression: CallExpression ): expression is E { diff --git a/src/types/ExpressionTypes.ts b/src/types/ExpressionTypes.ts index e943a8034..5729fe2dd 100644 --- a/src/types/ExpressionTypes.ts +++ b/src/types/ExpressionTypes.ts @@ -13,6 +13,7 @@ export interface VariableExpression { readonly shorthandBinary?: 'mult' | 'add' | 'remainder' readonly shorthandNumber?: number readonly shorthandUnary?: 'pred' + readonly shorthandFunc?: 'add' | 'pred' readonly magical?: boolean } @@ -33,6 +34,10 @@ export interface VariableShorthandNonUnaryNumber extends VariableExpression { readonly shorthandNumber: NonNullable } +export interface VariableShorthandFunc extends VariableExpression { + readonly shorthandFunc: NonNullable +} + export interface MagicalVariable extends VariableExpression { readonly magical: NonNullable } @@ -67,6 +72,10 @@ export type VariableWithEmphasizePriorityAndState< readonly emphasizePriority: true } +export type VariableWithStateShorthandFunc< + S extends keyof VariableStates +> = VariableShorthandFunc & VariableStates[S] + export type MagicalVariableWithState< S extends keyof VariableStates > = MagicalVariable & VariableStates[S] @@ -385,6 +394,17 @@ type ExecutableMagical< readonly func: F }) +type ExecutableShorthand< + S extends CallStates, + F extends VariableShorthandFunc, + N extends VariableShorthandNumber +> = CallExpression & + ({ + readonly state: S + readonly arg: N + readonly func: F + }) + type ExecutableBinary< S extends CallStates, B extends VariableShorthandBinary, @@ -430,6 +450,9 @@ export type StepVariableShorthandNonUnaryNumber< export type StepMagicalVariable< C extends CallStates = 'default' > = MagicalVariableWithState> +export type StepVariableShorthandFunc< + C extends CallStates = 'default' +> = VariableWithStateShorthandFunc> export interface StepConditional extends NonExecutableConditional, StepChild, StepChild> {} export interface StepFunction @@ -439,6 +462,12 @@ export interface NonExecutableStepCall extends NonExecutable> {} export interface ExecutableStepCallRegular extends ExecutableRegular, StepChild> {} +export interface ExecutableStepCallShorthand + extends ExecutableShorthand< + C, + StepVariableShorthandFunc, + StepVariableShorthandNumber + > {} export interface ExecutableStepCallMagical extends ExecutableMagical, StepChild> {} export interface ExecutableStepCallBinary @@ -481,10 +510,16 @@ type DistributeStepCallMagical = U extends CallStates : never export type ExecutableCallMagical = DistributeStepCallMagical +type DistributeStepCallShorthand = U extends CallStates + ? ExecutableStepCallShorthand + : never +export type ExecutableCallShorthand = DistributeStepCallShorthand + export type ExecutableCall = | ExecutableCallRegular | ExecutableCallMagical | ExecutableCallBinary + | ExecutableCallShorthand type DistributeStepConditional< U, diff --git a/yarn.lock b/yarn.lock index e472d9348..fe2d4e6b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1351,6 +1351,11 @@ dependencies: "@types/jest-diff" "*" +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + "@types/luxon@^1.15.2": version "1.15.2" resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-1.15.2.tgz#528f11f7d6dc08cec0445d4bea8065a5bb6989b2" @@ -1379,10 +1384,10 @@ resolved "https://registry.yarnpkg.com/@types/nprogress/-/nprogress-0.2.0.tgz#86c593682d4199212a0509cc3c4d562bbbd6e45f" integrity sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A== -"@types/prettier@^1.16.4": - version "1.16.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.16.4.tgz#5e5e97702cb68498aaba7349b941648daaf2385c" - integrity sha512-MG7ExKBo7AQ5UrL1awyYLNinNM/kyXgE4iP4Ul9fB+T7n768Z5Xem8IZeP6Bna0xze8gkDly49Rgge2HOEw4xA== +"@types/prettier@^1.18.0": + version "1.18.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.0.tgz#d2dbe4d5f76b455138f13a2d881278e2c06a733d" + integrity sha512-5N6WK/XXs9PLPpge2KOmOSaIym2vIo32GsrxM5YOFs7uZ8R9L/acg+hQzWsfwoHEpasqQkH0+3LzLTbiF1GFLQ== "@types/prop-types@*": version "15.7.1" @@ -1401,10 +1406,10 @@ dependencies: "@types/react" "*" -"@types/react-dom@^16.8.4": - version "16.8.4" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.4.tgz#7fb7ba368857c7aa0f4e4511c4710ca2c5a12a88" - integrity sha512-eIRpEW73DCzPIMaNBDP5pPIpK1KXyZwNgfxiVagb5iGiz6da+9A5hslSX6GAQKdO7SayVCS/Fr2kjqprgAvkfA== +"@types/react-dom@^16.8.5": + version "16.8.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.5.tgz#3e3f4d99199391a7fb40aa3a155c8dd99b899cbd" + integrity sha512-idCEjROZ2cqh29+trmTmZhsBAUNQuYrF92JHKzZ5+aiFM1mlSk3bb23CK7HhYuOY75Apgap5y2jTyHzaM2AJGA== dependencies: "@types/react" "*" @@ -1438,39 +1443,40 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== -"@typescript-eslint/eslint-plugin@^1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.12.0.tgz#96b4e08b5f998a198b8414508b1a289f9e8c549a" - integrity sha512-J/ZTZF+pLNqjXBGNfq5fahsoJ4vJOkYbitWPavA05IrZ7BXUaf4XWlhUB/ic1lpOGTRpLWF+PLAePjiHp6dz8g== +"@typescript-eslint/eslint-plugin@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" + integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== dependencies: - "@typescript-eslint/experimental-utils" "1.12.0" + "@typescript-eslint/experimental-utils" "1.13.0" eslint-utils "^1.3.1" functional-red-black-tree "^1.0.1" regexpp "^2.0.1" tsutils "^3.7.0" -"@typescript-eslint/experimental-utils@1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.12.0.tgz#98417ee2e0c6fe8d1e50d934a6535d9c0f4277b6" - integrity sha512-s0soOTMJloytr9GbPteMLNiO2HvJ+qgQkRNplABXiVw6vq7uQRvidkby64Gqt/nA7pys74HksHwRULaB/QRVyw== +"@typescript-eslint/experimental-utils@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== dependencies: - "@typescript-eslint/typescript-estree" "1.12.0" + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" eslint-scope "^4.0.0" -"@typescript-eslint/parser@^1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.12.0.tgz#9965895ec4745578185965d63f21510f93a3f35a" - integrity sha512-0uzbaa9ZLCA5yMWJywnJJ7YVENKGWVUhJDV5UrMoldC5HoI54W5kkdPhTfmtFKpPFp93MIwmJj0/61ztvmz5Dw== +"@typescript-eslint/parser@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" + integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.12.0" - "@typescript-eslint/typescript-estree" "1.12.0" + "@typescript-eslint/experimental-utils" "1.13.0" + "@typescript-eslint/typescript-estree" "1.13.0" eslint-visitor-keys "^1.0.0" -"@typescript-eslint/typescript-estree@1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.12.0.tgz#d8dd0a7cffb5e3c0c3e98714042d83e316dfc9a9" - integrity sha512-nwN6yy//XcVhFs0ZyU+teJHB8tbCm7AIA8mu6E2r5hu6MajwYBY3Uwop7+rPZWUN/IUOHpL8C+iUPMDVYUU3og== +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== dependencies: lodash.unescape "4.0.1" semver "5.5.0" @@ -3294,10 +3300,10 @@ eslint-plugin-flowtype@^2.x: dependencies: lodash "^4.17.10" -eslint-plugin-import@^2.18.0: - version "2.18.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.1.tgz#2e4f571d13839543992ad626a18c0edffde9626b" - integrity sha512-YEESFKOcMIXJTosb5YaepqVhQHGMb8dxkgov560GqMDP/658U5vk6FeVSR7xXLeYkPc7xPYy+uAoiYE/bKMphA== +eslint-plugin-import@^2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: array-includes "^3.0.3" contains-path "^0.1.0" @@ -3338,10 +3344,10 @@ eslint-plugin-react-hooks@^1.6.1: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.6.1.tgz#3c66a5515ea3e0a221ffc5d4e75c971c217b1a4c" integrity sha512-wHhmGJyVuijnYIJXZJHDUF2WM+rJYTjulUTqF9k61d3BTk8etydz+M4dXUVH7M76ZRS85rqBTCx0Es/lLsrjnA== -eslint-plugin-react@^7.14.2: - version "7.14.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.2.tgz#94c193cc77a899ac0ecbb2766fbef88685b7ecc1" - integrity sha512-jZdnKe3ip7FQOdjxks9XPN0pjUKZYq48OggNMd16Sk+8VXx6JOvXmlElxROCgp7tiUsTsze3jd78s/9AFJP2mA== +eslint-plugin-react@^7.14.3: + version "7.14.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" + integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== dependencies: array-includes "^3.0.3" doctrine "^2.1.0" @@ -5262,10 +5268,10 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -luxon@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.17.1.tgz#7261aae6f7a2cc3cf83cbe24c62335cf3a48caad" - integrity sha512-+xo7Pj54xwyEzlMdXzDqm60Ewqbn0QqACwfIo6so9M1idUtYQrD7/PHjEFQQmLCBu8wUe2IDC2jrcJJ3Buk4Pw== +luxon@^1.17.2: + version "1.17.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.17.2.tgz#95189c450341cfddf5f826ef8c32b5b022943fd5" + integrity sha512-qELKtIj3HD41N+MvgoxArk8DZGUb4Gpiijs91oi+ZmKJzRlxY6CoyTwNoUwnogCVs4p8HuxVJDik9JbnYgrCng== make-dir@^1.0.0: version "1.3.0"