From 954418e7818dd5d8fc4103c9de45a04c9649bd0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bart=C5=82omiej=20B=C5=82oniarz?=
<56109050+bartlomiejbloniarz@users.noreply.github.com>
Date: Mon, 11 Dec 2023 17:50:40 +0100
Subject: [PATCH 01/54] Improve reduced motion warning (#5487)
## Summary
This PR extends the reduced motion warning to inform that it is only
displayed in development mode and adds a note in docs that explains why
the warning is displayed and how it can be disabled.
## Test plan
---
docs/docs/guides/troubleshooting.mdx | 16 ++++++++++++++++
src/reanimated2/animation/util.ts | 2 +-
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/docs/docs/guides/troubleshooting.mdx b/docs/docs/guides/troubleshooting.mdx
index 6fb8f8b0c8a..cc1c6770ba1 100644
--- a/docs/docs/guides/troubleshooting.mdx
+++ b/docs/docs/guides/troubleshooting.mdx
@@ -139,6 +139,22 @@ See [Multiple versions of Reanimated were detected](#multiple-versions-of-reanim
**Solution:** Please upgrade to a newer version of React Native or downgrade to an older version of Reanimated.
See [the compatibility table](compatibility) for a full list of supported versions of React Native.
+## Warnings
+
+### Reduced motion setting is enabled on this device.
+
+**Problem:** This warning is displayed to avoid confusion that could arise when Reduced motion is enabled.
+
+**Solution:** Do nothing, this warning is safe to ignore as it is only displayed in development mode to avoid confusion. If you wish to disable it, you can add the following line to your project's root file:
+
+```js
+LogBox.ignoreLogs([
+ '[Reanimated] Reduced motion setting is enabled on this device.',
+]);
+```
+
+See [the accessibility overview](accessibility) to learn more about Reduced Motion.
+
## Threading issues
### Tried to synchronously call a non-worklet function on the UI thread
diff --git a/src/reanimated2/animation/util.ts b/src/reanimated2/animation/util.ts
index 027eb837b1a..1184c158c80 100644
--- a/src/reanimated2/animation/util.ts
+++ b/src/reanimated2/animation/util.ts
@@ -38,7 +38,7 @@ const IS_REDUCED_MOTION = isReducedMotion();
if (__DEV__ && IS_REDUCED_MOTION) {
console.warn(
- `[Reanimated] Reduced motion setting is enabled on this device. Some animations will be disabled by default. You can override the behavior for individual animations, see https://docs.swmansion.com/react-native-reanimated/docs/guides/accessibility.`
+ `[Reanimated] Reduced motion setting is enabled on this device. This warning is visible only in the development mode. Some animations will be disabled by default. You can override the behavior for individual animations, see https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#reduced-motion-setting-is-enabled-on-this-device.`
);
}
From e99d2554027b933f3799e66392dd9ada6fab3b5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Bert?=
<63123542+m-bert@users.noreply.github.com>
Date: Wed, 13 Dec 2023 16:15:33 +0100
Subject: [PATCH 02/54] Fix animation cleanup (#5474)
## Summary
Current animation cleanup mechanism has many flaws. The biggest problem
is that it may cause bugs such as disappearing components, or even
removing predefined animations from DOM.
This PR introduces new approach to cleaning animations, which should
solve problems mentioned above.
## Test plan
Tested on the code below (uncomment transform to see bugs)
Test code
```jsx
import React from 'react';
import { StyleSheet, View, Text, Pressable } from 'react-native';
import Animated, {
FadeIn,
FadeInLeft,
FadeInRight,
FadeInUp,
FadeInDown,
FadeOut,
FadeOutLeft,
FadeOutRight,
FadeOutUp,
FadeOutDown,
RollOutLeft,
Keyframe,
} from 'react-native-reanimated';
const DELAY = 500;
const fadeAnimation = [
{
enteringName: 'FadeIn',
enteringAnimation: FadeIn,
exitingName: 'FadeOut',
exitingAnimation: RollOutLeft,
},
{
enteringName: 'FadeInLeft',
enteringAnimation: FadeInLeft,
exitingName: 'FadeOutLeft',
exitingAnimation: FadeOutLeft,
},
{
enteringName: 'FadeInRight',
enteringAnimation: FadeInRight,
exitingName: 'FadeOutRight',
exitingAnimation: FadeOutRight,
},
{
enteringName: 'FadeInUp',
enteringAnimation: FadeInUp,
exitingName: 'FadeOutUp',
exitingAnimation: FadeOutUp,
},
{
enteringName: 'FadeInDown',
enteringAnimation: FadeInDown,
exitingName: 'FadeOutDown',
exitingAnimation: FadeOutDown,
},
];
export default function App() {
const [showExiting, setShowExiting] = React.useState(false);
React.useEffect(() => {
const timeout = setTimeout(() => {
setShowExiting(true);
}, DELAY * fadeAnimation.length);
return () => clearTimeout(timeout);
}, []);
return (
{showExiting
? fadeAnimation.map((animation) => (
{animation.exitingName}
))
: fadeAnimation.map((animation, i) => (
{animation.enteringName}
))}
setShowExiting(!showExiting)}>
Click me!
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
box: {
height: 50,
width: 250,
margin: 4,
alignItems: 'center',
justifyContent: 'center',
},
enteringBox: {
backgroundColor: '#b58df1',
},
enteringText: {
fontSize: 16,
color: 'white',
},
exitingBox: {
borderColor: '#b58df1',
borderStyle: 'dashed',
borderWidth: 1,
},
exitingText: {
fontSize: 16,
color: '#b58df1',
},
button: {
width: 100,
height: 40,
marginTop: 50,
backgroundColor: '#b58df1',
borderRadius: 5,
display: 'flex',
alignItems: 'center',
justifyContent: 'space-around',
},
});
```
---
.../createAnimatedComponent.tsx | 6 +-
.../layoutReanimation/web/componentUtils.ts | 4 +-
.../layoutReanimation/web/config.ts | 3 -
.../layoutReanimation/web/domUtils.ts | 87 +++++++++++++++----
4 files changed, 76 insertions(+), 24 deletions(-)
diff --git a/src/createAnimatedComponent/createAnimatedComponent.tsx b/src/createAnimatedComponent/createAnimatedComponent.tsx
index ebeaf6364bc..4f3f6c5eb07 100644
--- a/src/createAnimatedComponent/createAnimatedComponent.tsx
+++ b/src/createAnimatedComponent/createAnimatedComponent.tsx
@@ -60,6 +60,10 @@ import type { FlatList, FlatListProps } from 'react-native';
const IS_WEB = isWeb();
const IS_FABRIC = isFabric();
+if (IS_WEB) {
+ configureWebLayoutAnimations();
+}
+
function onlyAnimatedStyles(styles: StyleProps[]): StyleProps[] {
return styles.filter((style) => style?.viewDescriptors);
}
@@ -149,8 +153,6 @@ export function createAnimatedComponent(
this._InlinePropManager.attachInlineProps(this, this._getViewInfo());
if (IS_WEB) {
- configureWebLayoutAnimations();
-
if (this.props.exiting) {
saveSnapshot(this._component as HTMLElement);
}
diff --git a/src/reanimated2/layoutReanimation/web/componentUtils.ts b/src/reanimated2/layoutReanimation/web/componentUtils.ts
index 3986b314dde..8b00f637a7f 100644
--- a/src/reanimated2/layoutReanimation/web/componentUtils.ts
+++ b/src/reanimated2/layoutReanimation/web/componentUtils.ts
@@ -192,7 +192,9 @@ export function setElementAnimation(
element.style.transform = convertTransformToString(existingTransform);
};
- scheduleAnimationCleanup(animationName, duration + delay);
+ if (!(animationName in Animations)) {
+ scheduleAnimationCleanup(animationName, duration + delay);
+ }
}
export function handleLayoutTransition(
diff --git a/src/reanimated2/layoutReanimation/web/config.ts b/src/reanimated2/layoutReanimation/web/config.ts
index 83d0b4b2923..60307910897 100644
--- a/src/reanimated2/layoutReanimation/web/config.ts
+++ b/src/reanimated2/layoutReanimation/web/config.ts
@@ -39,9 +39,6 @@ import { ZoomIn, ZoomInData, ZoomOut, ZoomOutData } from './animation/Zoom.web';
import type { AnimationData } from './animationParser';
-// Since we cannot remove keyframe from DOM by its name, we have to store its id
-export const customAnimations = new Map();
-
export type AnimationCallback = ((finished: boolean) => void) | null;
export interface AnimationConfig {
diff --git a/src/reanimated2/layoutReanimation/web/domUtils.ts b/src/reanimated2/layoutReanimation/web/domUtils.ts
index eff80e77cd5..9ec63f81b43 100644
--- a/src/reanimated2/layoutReanimation/web/domUtils.ts
+++ b/src/reanimated2/layoutReanimation/web/domUtils.ts
@@ -1,63 +1,114 @@
'use strict';
-import { Animations, customAnimations } from './config';
+import { isWindowAvailable } from '../../PlatformChecker';
+import { Animations } from './config';
import type { AnimationNames } from './config';
-const WEB_ANIMATIONS_ID = 'ReanimatedWebAnimationsStyle';
+const PREDEFINED_WEB_ANIMATIONS_ID = 'ReanimatedPredefinedWebAnimationsStyle';
+const CUSTOM_WEB_ANIMATIONS_ID = 'ReanimatedCustomWebAnimationsStyle';
+
+// Since we cannot remove keyframe from DOM by its name, we have to store its id
+const animationNameToIndex = new Map();
+const animationNameList: string[] = [];
/**
* Creates `HTMLStyleElement`, inserts it into DOM and then inserts CSS rules into the stylesheet.
* If style element already exists, nothing happens.
*/
export function configureWebLayoutAnimations() {
- if (document.getElementById(WEB_ANIMATIONS_ID) !== null) {
+ if (
+ !isWindowAvailable() ||
+ document.getElementById(PREDEFINED_WEB_ANIMATIONS_ID) !== null
+ ) {
return;
}
- const style = document.createElement('style');
- style.id = WEB_ANIMATIONS_ID;
+ const predefinedAnimationsStyleTag = document.createElement('style');
+ predefinedAnimationsStyleTag.id = PREDEFINED_WEB_ANIMATIONS_ID;
- style.onload = () => {
- if (!style.sheet) {
+ predefinedAnimationsStyleTag.onload = () => {
+ if (!predefinedAnimationsStyleTag.sheet) {
console.error(
- '[Reanimated] Failed to create layout animations stylesheet'
+ '[Reanimated] Failed to create layout animations stylesheet.'
);
return;
}
for (const animationName in Animations) {
- style.sheet.insertRule(Animations[animationName as AnimationNames].style);
+ predefinedAnimationsStyleTag.sheet.insertRule(
+ Animations[animationName as AnimationNames].style
+ );
}
};
- document.head.appendChild(style);
+ const customAnimationsStyleTag = document.createElement('style');
+ customAnimationsStyleTag.id = CUSTOM_WEB_ANIMATIONS_ID;
+
+ document.head.appendChild(predefinedAnimationsStyleTag);
+ document.head.appendChild(customAnimationsStyleTag);
}
export function insertWebAnimation(animationName: string, keyframe: string) {
+ if (!isWindowAvailable()) {
+ return;
+ }
+
const styleTag = document.getElementById(
- WEB_ANIMATIONS_ID
+ CUSTOM_WEB_ANIMATIONS_ID
) as HTMLStyleElement;
if (!styleTag.sheet) {
- console.error('[Reanimated] Failed to create layout animations stylesheet');
+ console.error(
+ '[Reanimated] Failed to create layout animations stylesheet.'
+ );
return;
}
- const customTransitionId = styleTag.sheet.insertRule(keyframe);
- customAnimations.set(animationName, customTransitionId);
+ styleTag.sheet.insertRule(keyframe, 0);
+ animationNameList.unshift(animationName);
+ animationNameToIndex.set(animationName, 0);
+
+ for (let i = 1; i < animationNameList.length; ++i) {
+ const nextAnimationName = animationNameList[i];
+ const nextAnimationIndex = animationNameToIndex.get(nextAnimationName);
+
+ if (nextAnimationIndex === undefined) {
+ throw new Error('[Reanimated] Failed to obtain animation index.');
+ }
+
+ animationNameToIndex.set(animationNameList[i], nextAnimationIndex + 1);
+ }
}
function removeWebAnimation(animationName: string) {
- if (!customAnimations.has(animationName)) {
+ if (!isWindowAvailable()) {
return;
}
const styleTag = document.getElementById(
- WEB_ANIMATIONS_ID
+ CUSTOM_WEB_ANIMATIONS_ID
) as HTMLStyleElement;
- styleTag.sheet?.deleteRule(customAnimations.get(animationName) as number);
- customAnimations.delete(animationName);
+ const currentAnimationIndex = animationNameToIndex.get(animationName);
+
+ if (currentAnimationIndex === undefined) {
+ throw new Error('[Reanimated] Failed to obtain animation index.');
+ }
+
+ styleTag.sheet?.deleteRule(currentAnimationIndex);
+ animationNameList.splice(currentAnimationIndex, 1);
+ animationNameToIndex.delete(animationName);
+
+ for (let i = currentAnimationIndex; i < animationNameList.length; ++i) {
+ const nextAnimationName = animationNameList[i];
+ const nextAnimationIndex = animationNameToIndex.get(nextAnimationName);
+
+ if (nextAnimationIndex === undefined) {
+ throw new Error('[Reanimated] Failed to obtain animation index.');
+ }
+
+ animationNameToIndex.set(animationNameList[i], nextAnimationIndex - 1);
+ }
}
const timeoutScale = 1.25; // We use this value to enlarge timeout duration. It can prove useful if animation lags.
From 532f2db206f39195e497c3892bd505b9b40cf8f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Bert?=
<63123542+m-bert@users.noreply.github.com>
Date: Thu, 14 Dec 2023 10:23:30 +0100
Subject: [PATCH 03/54] [Web LA] Update `left` from snapshot. (#5491)
## Summary
#5444 introduced one trick to calculate header height. After further
investigation it turned out, that we also have to use the same technique
for `left` property from the snapshot. Below you can find two short
videos which show the difference.
## Comparison
https://github.com/software-mansion/react-native-reanimated/assets/63123542/4f2ad34c-b5ab-41de-a0bb-4b1692cdd664
https://github.com/software-mansion/react-native-reanimated/assets/63123542/d237ee0c-57ea-4b5d-958a-633674bdd1f9
## Test plan
Tested on example app and code below
Test code
```jsx
import React from 'react';
import { StyleSheet, View, Text, Pressable } from 'react-native';
import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
const DELAY = 500;
const fadeAnimation = [
{
enteringName: 'FadeIn',
enteringAnimation: FadeIn,
exitingName: 'FadeOut',
exitingAnimation: FadeOut,
},
];
export default function App() {
const [show, setShow] = React.useState(true);
React.useEffect(() => {
const timeout = setTimeout(() => {
setShow(true);
}, DELAY * fadeAnimation.length);
return () => clearTimeout(timeout);
}, []);
return (
{fadeAnimation.map(
(animation, i) =>
show && (
{animation.enteringName}
)
)}
setShow(!show)}>
Click me!
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
box: {
height: 50,
width: 250,
margin: 4,
alignItems: 'center',
justifyContent: 'center',
},
enteringBox: {
backgroundColor: '#b58df1',
},
enteringText: {
fontSize: 16,
color: 'white',
},
exitingBox: {
borderColor: '#b58df1',
borderStyle: 'dashed',
borderWidth: 1,
},
exitingText: {
fontSize: 16,
color: '#b58df1',
},
button: {
position: 'absolute',
top: 250,
left: 250,
width: 100,
height: 40,
backgroundColor: '#b58df1',
borderRadius: 5,
display: 'flex',
alignItems: 'center',
justifyContent: 'space-around',
userSelect: 'none',
},
parent: {
height: 70,
width: 270,
display: 'flex',
alignItems: 'center',
justifyContent: 'space-around',
borderWidth: 2,
borderRadius: 10,
borderColor: '#b58df1',
borderStyle: 'dashed',
},
});
```
---
.../layoutReanimation/web/componentUtils.ts | 62 ++++++++++++++-----
1 file changed, 45 insertions(+), 17 deletions(-)
diff --git a/src/reanimated2/layoutReanimation/web/componentUtils.ts b/src/reanimated2/layoutReanimation/web/componentUtils.ts
index 8b00f637a7f..a7eeafea84d 100644
--- a/src/reanimated2/layoutReanimation/web/componentUtils.ts
+++ b/src/reanimated2/layoutReanimation/web/componentUtils.ts
@@ -240,6 +240,50 @@ export function handleLayoutTransition(
setElementAnimation(element, animationConfig, existingTransform);
}
+function fixElementPosition(
+ element: HTMLElement,
+ parent: HTMLElement,
+ snapshot: DOMRect
+) {
+ const parentRect = parent.getBoundingClientRect();
+
+ const parentBorderTopValue = parseInt(
+ getComputedStyle(parent).borderTopWidth
+ );
+
+ const parentBorderLeftValue = parseInt(
+ getComputedStyle(parent).borderLeftWidth
+ );
+
+ const dummyRect = element.getBoundingClientRect();
+ // getBoundingClientRect returns DOMRect with position of the element with respect to document body.
+ // However, using position `absolute` doesn't guarantee, that the dummy will be placed relative to body element.
+ // The trick below allows us to once again get position relative to body, by comparing snapshot with new position of the dummy.
+ if (dummyRect.top !== snapshot.top) {
+ element.style.top = `${
+ snapshot.top - parentRect.top - parentBorderTopValue
+ }px`;
+ }
+
+ if (dummyRect.left !== snapshot.left) {
+ element.style.left = `${
+ snapshot.left - parentRect.left - parentBorderLeftValue
+ }px`;
+ }
+}
+
+function setDummyPosition(dummy: HTMLElement, snapshot: DOMRect) {
+ dummy.style.transform = '';
+ dummy.style.position = 'absolute';
+ dummy.style.top = `${snapshot.top}px`;
+ dummy.style.left = `${snapshot.left}px`;
+ dummy.style.width = `${snapshot.width}px`;
+ dummy.style.height = `${snapshot.height}px`;
+ dummy.style.margin = '0px'; // tmpElement has absolute position, so margin is not necessary
+
+ fixElementPosition(dummy, dummy.parentElement!, snapshot);
+}
+
export function handleExitingAnimation(
element: HTMLElement,
animationConfig: AnimationConfig
@@ -265,23 +309,7 @@ export function handleExitingAnimation(
const snapshot = snapshots.get(element);
- dummy.style.transform = '';
- dummy.style.position = 'absolute';
- dummy.style.top = `${snapshot.top}px`;
- dummy.style.left = `${snapshot.left}px`;
- dummy.style.width = `${snapshot.width}px`;
- dummy.style.height = `${snapshot.height}px`;
- dummy.style.margin = '0px'; // tmpElement has absolute position, so margin is not necessary
-
- const newRect = dummy.getBoundingClientRect();
-
- // getBoundingClientRect returns DOMRect with position of the element with respect to document body.
- // If react-navigation is used, `dummy` will be placed with wrong `top` position because of the header height.
- // The trick below allows us to once again get position relative to body, and then calculate header height.
- if (newRect.top !== snapshot.top) {
- const headerHeight = Math.abs(newRect.top - snapshot.top);
- dummy.style.top = `${snapshot.top - headerHeight}px`;
- }
+ setDummyPosition(dummy, snapshot);
const originalOnAnimationEnd = dummy.onanimationend;
From 696a8c40584f438a6051f947ab1e5e295598be6e Mon Sep 17 00:00:00 2001
From: Alex Cynk
Date: Thu, 14 Dec 2023 15:33:00 +0100
Subject: [PATCH 04/54] Fix overloads in createAnimatedComponent (#5463)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
1. Move the overload with type deprecation to be the last one. It means
that if user provides invalid type which isn't covered by any overload
he will not get the warning about FlatList deprecation. This warning was
very confusing if user wasn't using FlatList at all
2. Add overload of `ComponentType`. Since `ComponentType
=
ComponentClass
| FunctionComponent
` we have assume that it is
enough to have two overloads (ComponentClass & FunctionComponent), but
it isn't
|BEFORE|AFTER|
|--|--|
|Error for FastImage and deprecation for FastImage ❌ | Deprecation for
FlatList only 😎|
|||
|||
## Test plan
Co-authored-by: Aleksandra Cynk
---
.../createAnimatedComponent.tsx | 26 ++++++++++++-------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/src/createAnimatedComponent/createAnimatedComponent.tsx b/src/createAnimatedComponent/createAnimatedComponent.tsx
index 4f3f6c5eb07..67ed725ac83 100644
--- a/src/createAnimatedComponent/createAnimatedComponent.tsx
+++ b/src/createAnimatedComponent/createAnimatedComponent.tsx
@@ -91,15 +91,7 @@ type Options
= {
* @see https://docs.swmansion.com/react-native-reanimated/docs/core/createAnimatedComponent
*/
-/**
- * @deprecated Please use `Animated.FlatList` component instead of calling `Animated.createAnimatedComponent(FlatList)` manually.
- */
-// @ts-ignore This is required to create this overload, since type of createAnimatedComponent is incorrect and doesn't include typeof FlatList
-export function createAnimatedComponent(
- component: typeof FlatList,
- options?: Options
-): ComponentClass>>;
-
+// Don't change the order of overloads, since such a change breaks current behavior
export function createAnimatedComponent
(
component: FunctionComponent
,
options?: Options
@@ -110,6 +102,22 @@ export function createAnimatedComponent
(
options?: Options
): ComponentClass>;
+export function createAnimatedComponent
(
+ // Actually ComponentType
= ComponentClass
| FunctionComponent
but we need this overload too
+ // since some external components (like FastImage) are typed just as ComponentType
+ component: ComponentType
,
+ options?: Options
+): FunctionComponent> | ComponentClass>;
+
+/**
+ * @deprecated Please use `Animated.FlatList` component instead of calling `Animated.createAnimatedComponent(FlatList)` manually.
+ */
+// @ts-ignore This is required to create this overload, since type of createAnimatedComponent is incorrect and doesn't include typeof FlatList
+export function createAnimatedComponent(
+ component: typeof FlatList,
+ options?: Options
+): ComponentClass>>;
+
export function createAnimatedComponent(
Component: ComponentType,
options?: Options
From f4cc3b8ee6964cd32bbc8003e846cfd93cc3ed27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Bert?=
<63123542+m-bert@users.noreply.github.com>
Date: Thu, 14 Dec 2023 16:33:01 +0100
Subject: [PATCH 05/54] Add explanation for `isWindowAvailable` in
`DOMUtils.ts` (#5500)
## Summary
Add explanation for using `isWindowAvailable` inside `DOMUtils.ts`. We
need this check because without it SSR crashes.
## Test plan
yolo
---
src/reanimated2/layoutReanimation/web/domUtils.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/reanimated2/layoutReanimation/web/domUtils.ts b/src/reanimated2/layoutReanimation/web/domUtils.ts
index 9ec63f81b43..72de2439a6b 100644
--- a/src/reanimated2/layoutReanimation/web/domUtils.ts
+++ b/src/reanimated2/layoutReanimation/web/domUtils.ts
@@ -17,7 +17,7 @@ const animationNameList: string[] = [];
*/
export function configureWebLayoutAnimations() {
if (
- !isWindowAvailable() ||
+ !isWindowAvailable() || // Without this check SSR crashes because document is undefined (NextExample on CI)
document.getElementById(PREDEFINED_WEB_ANIMATIONS_ID) !== null
) {
return;
@@ -49,6 +49,7 @@ export function configureWebLayoutAnimations() {
}
export function insertWebAnimation(animationName: string, keyframe: string) {
+ // Without this check SSR crashes because document is undefined (NextExample on CI)
if (!isWindowAvailable()) {
return;
}
@@ -81,6 +82,7 @@ export function insertWebAnimation(animationName: string, keyframe: string) {
}
function removeWebAnimation(animationName: string) {
+ // Without this check SSR crashes because document is undefined (NextExample on CI)
if (!isWindowAvailable()) {
return;
}
From c5bf052050f0c926d65f85c9566251d683000848 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20=C5=BBelawski?=
<40713406+tjzel@users.noreply.github.com>
Date: Thu, 14 Dec 2023 16:46:19 +0100
Subject: [PATCH 06/54] Improve TS in src [0/6] - Allow non-null assertion and
remove some eslint directives (#5481)
## Summary
Non-null assertions are considered to be a bad practice - however this
is in regard to pure TypeScript code. This is not the case in
Reanimated, since we have to deal with multiple platforms and multiple
threads. Therefore sometimes we know that a value is defined, without a
need for unnecessary checks for `undefined` or `null` - and non-null
assertions are very handy there, since they are very short.
Also, using `?` operator instead of TS `!` could lead to unexpected
behavior that could be hard to understand. Consider the following
example:
```TS
function dispatchCommandPaper(
animatedRef: AnimatedRef,
commandName: string,
args: Array = []
) {
'worklet';
if (!_WORKLET) {
return;
}
const viewTag = animatedRef() as number;
// TS error - _dispatchCommandPaper is not defined
_dispatchCommandPaper(viewTag, commandName, args);
}
```
We get a TS error even though we are sure that `_dispatchCommandPaper`
is defined - `dispatchCommandPaper` is only used on Paper and
`_dispatchCommandPaper` is injected there. However, if we changed it to:
```TS
_dispatchCommandPaper?(viewTag, commandName, args);
```
And something would go so wrong that `_dispatchCommandPaper` would
actually be undefined this function would silently fail instead of
throwing with a meaningful stacktrace.
## Test plan
TS tests are sufficient for this.
Co-authored by: @marmor157.
---
.eslintrc.js | 1 +
.../InlinePropManager.ts | 3 --
.../createAnimatedComponent.tsx | 5 ---
src/reanimated2/PropAdapters.ts | 1 -
src/reanimated2/UpdateProps.ts | 3 --
src/reanimated2/hook/useDerivedValue.ts | 3 +-
src/reanimated2/hook/utils.ts | 11 ++++---
.../animationBuilder/Keyframe.ts | 19 +++++------
.../defaultTransitions/EntryExitTransition.ts | 8 +----
.../layoutReanimation/web/componentUtils.ts | 33 +++++++------------
10 files changed, 30 insertions(+), 57 deletions(-)
diff --git a/.eslintrc.js b/.eslintrc.js
index 0184b9598ac..b4845edcf51 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -60,5 +60,6 @@ module.exports = {
{ fixMixedExportsWithInlineTypeSpecifier: false },
],
'tsdoc/syntax': 'error',
+ '@typescript-eslint/no-non-null-assertion': 'off',
},
};
diff --git a/src/createAnimatedComponent/InlinePropManager.ts b/src/createAnimatedComponent/InlinePropManager.ts
index 993c9d1708c..1bf1884eebf 100644
--- a/src/createAnimatedComponent/InlinePropManager.ts
+++ b/src/createAnimatedComponent/InlinePropManager.ts
@@ -153,11 +153,8 @@ export class InlinePropManager implements IInlinePropManager {
}
this._inlinePropsViewDescriptors.add({
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
tag: viewTag as number,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
name: viewName!,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
shadowNodeWrapper: shadowNodeWrapper!,
});
}
diff --git a/src/createAnimatedComponent/createAnimatedComponent.tsx b/src/createAnimatedComponent/createAnimatedComponent.tsx
index 67ed725ac83..74c819e2173 100644
--- a/src/createAnimatedComponent/createAnimatedComponent.tsx
+++ b/src/createAnimatedComponent/createAnimatedComponent.tsx
@@ -296,10 +296,8 @@ export function createAnimatedComponent(
_updateFromNative(props: StyleProps) {
if (options?.setNativeProps) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
options.setNativeProps(this._component as AnimatedComponentRef, props);
} else {
- // eslint-disable-next-line no-unused-expressions
(this._component as AnimatedComponentRef)?.setNativeProps?.(props);
}
}
@@ -428,11 +426,8 @@ export function createAnimatedComponent(
// attach animatedProps property
if (this.props.animatedProps?.viewDescriptors) {
this.props.animatedProps.viewDescriptors.add({
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
tag: viewTag as number,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
name: viewName!,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
shadowNodeWrapper: shadowNodeWrapper!,
});
}
diff --git a/src/reanimated2/PropAdapters.ts b/src/reanimated2/PropAdapters.ts
index 05950f0ac82..4c8e0f9af0e 100644
--- a/src/reanimated2/PropAdapters.ts
+++ b/src/reanimated2/PropAdapters.ts
@@ -14,7 +14,6 @@ export const createAnimatedPropAdapter = ((
nativeProps?: string[]
): __AdapterWorkletFunction => {
const nativePropsToAdd: { [key: string]: boolean } = {};
- // eslint-disable-next-line no-unused-expressions
nativeProps?.forEach((prop) => {
nativePropsToAdd[prop] = true;
});
diff --git a/src/reanimated2/UpdateProps.ts b/src/reanimated2/UpdateProps.ts
index 597c153cfc9..2a9b17d79d4 100644
--- a/src/reanimated2/UpdateProps.ts
+++ b/src/reanimated2/UpdateProps.ts
@@ -29,7 +29,6 @@ if (shouldBeUseWeb()) {
updateProps = (viewDescriptors, updates) => {
'worklet';
processColorsInProps(updates);
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
global.UpdatePropsManager!.update(viewDescriptors, updates);
};
}
@@ -78,7 +77,6 @@ const createUpdatePropsManager = isFabric()
});
},
flush() {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
_updatePropsFabric!(operations);
operations.length = 0;
},
@@ -109,7 +107,6 @@ const createUpdatePropsManager = isFabric()
});
},
flush() {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
_updatePropsPaper!(operations);
operations.length = 0;
},
diff --git a/src/reanimated2/hook/useDerivedValue.ts b/src/reanimated2/hook/useDerivedValue.ts
index fd834e5ef64..adbed7f7590 100644
--- a/src/reanimated2/hook/useDerivedValue.ts
+++ b/src/reanimated2/hook/useDerivedValue.ts
@@ -46,8 +46,7 @@ export function useDerivedValue(
initRef.current = makeMutable(initialUpdaterRun(updater));
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const sharedValue: SharedValue = initRef.current!;
+ const sharedValue: SharedValue = initRef.current;
useEffect(() => {
const fun = () => {
diff --git a/src/reanimated2/hook/utils.ts b/src/reanimated2/hook/utils.ts
index 2f8a81e2c40..5aac98d5738 100644
--- a/src/reanimated2/hook/utils.ts
+++ b/src/reanimated2/hook/utils.ts
@@ -42,8 +42,10 @@ export function areDependenciesEqual(
prevDeps: DependencyList
) {
function is(x: number, y: number) {
- // eslint-disable-next-line no-self-compare
- return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);
+ return (
+ (x === y && (x !== 0 || 1 / x === 1 / y)) ||
+ (Number.isNaN(x) && Number.isNaN(y))
+ );
}
const objectIs: (nextDeps: unknown, prevDeps: unknown) => boolean =
typeof Object.is === 'function' ? Object.is : is;
@@ -83,8 +85,9 @@ export function isAnimated(prop: unknown) {
// This function works because `Object.keys`
// return empty array of primitives and on arrays
// it returns array of its indices.
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export function shallowEqual(a: any, b: any) {
+export function shallowEqual<
+ T extends Record
+>(a: T, b: T) {
'worklet';
const aKeys = Object.keys(a);
const bKeys = Object.keys(b);
diff --git a/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts b/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts
index dec880a488c..a86fb1149dd 100644
--- a/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts
+++ b/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts
@@ -159,16 +159,14 @@ class InnerKeyframe implements IEntryExitAnimationBuilder {
if (!Array.isArray(keyframe.transform)) {
return;
}
- keyframe.transform.forEach(
- (transformStyle: { [key: string]: any }, index) => {
- Object.keys(transformStyle).forEach((transformProp: string) => {
- addKeyPointWith(
- makeKeyframeKey(index, transformProp),
- transformStyle[transformProp]
- );
- });
- }
- );
+ keyframe.transform.forEach((transformStyle, index) => {
+ Object.keys(transformStyle).forEach((transformProp: string) => {
+ addKeyPointWith(
+ makeKeyframeKey(index, transformProp),
+ transformStyle[transformProp as keyof typeof transformStyle]
+ );
+ });
+ });
} else {
addKeyPointWith(key, keyframe[key]);
}
@@ -256,7 +254,6 @@ class InnerKeyframe implements IEntryExitAnimationBuilder {
if (!('transform' in animations)) {
animations.transform = [];
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
animations.transform!.push({
[key.split(':')[1]]: animation,
});
diff --git a/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts b/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts
index 45d1ae3be9e..8cd5a3c6cf2 100644
--- a/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts
+++ b/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts
@@ -78,7 +78,6 @@ export class EntryExitTransition
}
exitingValues.animations.transform.forEach((value, index) => {
for (const transformProp of Object.keys(value)) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
animations.transform!.push({
[transformProp]: delayFunction(
delay,
@@ -135,16 +134,13 @@ export class EntryExitTransition
}
enteringValues.animations.transform.forEach((value, index) => {
for (const transformProp of Object.keys(value)) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
animations.transform!.push({
[transformProp]: delayFunction(
delay + exitingDuration,
withSequence(
withTiming(
enteringValues.initialValues.transform
- ? // TODO TYPESCRIPT
- // @ts-ignore Read similar comment above.
- enteringValues.initialValues.transform[index][
+ ? enteringValues.initialValues.transform[index][
transformProp as keyof TransformArrayItem
]
: 0,
@@ -175,8 +171,6 @@ export class EntryExitTransition
? exitingValues.initialValues.transform
: []
).concat(
- // TODO TYPESCRIPT
- // @ts-ignore Read similar comment above.
(Array.isArray(enteringValues.animations.transform)
? enteringValues.animations.transform
: []
diff --git a/src/reanimated2/layoutReanimation/web/componentUtils.ts b/src/reanimated2/layoutReanimation/web/componentUtils.ts
index a7eeafea84d..dc77f034cc7 100644
--- a/src/reanimated2/layoutReanimation/web/componentUtils.ts
+++ b/src/reanimated2/layoutReanimation/web/componentUtils.ts
@@ -17,20 +17,16 @@ import { _updatePropsJS } from '../../js-reanimated';
import type { ReanimatedHTMLElement } from '../../js-reanimated';
import { ReduceMotion } from '../../commonTypes';
import type { StyleProps } from '../../commonTypes';
-import { useReducedMotion } from '../../hook/useReducedMotion';
+import { isReducedMotion } from '../../PlatformChecker';
import { LayoutAnimationType } from '../animationBuilder/commonTypes';
-const snapshots = new WeakMap();
+const snapshots = new WeakMap();
function getEasingFromConfig(config: CustomConfig): string {
- const easingName = (
- config.easingV !== undefined &&
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- config.easingV!.name in WebEasings
- ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- config.easingV!.name
- : 'linear'
- ) as WebEasingsNames;
+ const easingName =
+ config.easingV && config.easingV.name in WebEasings
+ ? (config.easingV.name as WebEasingsNames)
+ : 'linear';
return `cubic-bezier(${WebEasings[easingName].toString()})`;
}
@@ -50,14 +46,12 @@ function getDelayFromConfig(config: CustomConfig): number {
return shouldRandomizeDelay
? getRandomDelay(config.delayV)
- : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- config.delayV! / 1000;
+ : config.delayV / 1000;
}
export function getReducedMotionFromConfig(config: CustomConfig) {
if (!config.reduceMotionV) {
- // eslint-disable-next-line react-hooks/rules-of-hooks
- return useReducedMotion();
+ return isReducedMotion();
}
switch (config.reduceMotionV) {
@@ -66,8 +60,7 @@ export function getReducedMotionFromConfig(config: CustomConfig) {
case ReduceMotion.Always:
return true;
default:
- // eslint-disable-next-line react-hooks/rules-of-hooks
- return useReducedMotion();
+ return isReducedMotion();
}
}
@@ -81,14 +74,12 @@ function getDurationFromConfig(
: Animations[animationName].duration;
return config.durationV !== undefined
- ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- config.durationV! / 1000
+ ? config.durationV / 1000
: defaultDuration;
}
function getCallbackFromConfig(config: CustomConfig): AnimationCallback {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return config.callbackV !== undefined ? config.callbackV! : null;
+ return config.callbackV !== undefined ? config.callbackV : null;
}
function getReversedFromConfig(config: CustomConfig) {
@@ -307,7 +298,7 @@ export function handleExitingAnimation(
setElementAnimation(dummy, animationConfig);
parent?.appendChild(dummy);
- const snapshot = snapshots.get(element);
+ const snapshot = snapshots.get(element)!;
setDummyPosition(dummy, snapshot);
From d3ebe775c3bda7a0dcdbaf309e985e7481bdb943 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20=C5=BBelawski?=
<40713406+tjzel@users.noreply.github.com>
Date: Fri, 15 Dec 2023 18:37:43 +0100
Subject: [PATCH 07/54] Improve TS in src [1/6] - Remove unused overloads
(#5482)
## Summary
Currently worklets RGBtoHSV and HSVtoRGB are overloaded so they either
accept 3 arguments or 1 argument that has 3 properties. However, we only
use the first case so removing those overloads simplifies the code.
## Test plan
See that object overload is not used.
Co-authored by: @marmor157.
---
src/reanimated2/Colors.ts | 80 +++++++++++++++------------------------
1 file changed, 30 insertions(+), 50 deletions(-)
diff --git a/src/reanimated2/Colors.ts b/src/reanimated2/Colors.ts
index 2375bfc8e77..78874ef94ca 100644
--- a/src/reanimated2/Colors.ts
+++ b/src/reanimated2/Colors.ts
@@ -453,36 +453,25 @@ export const rgbaColor = (
return c;
};
-/* accepts parameters
- * r Object = {r:x, g:y, b:z}
- * OR
- * r, g, b
- * 0 <= r, g, b <= 255
- * returns 0 <= h, s, v <= 1
+/**
+ *
+ * @param r - red value (0-255)
+ * @param g - green value (0-255)
+ * @param b - blue value (0-255)
+ * @returns \{h: hue (0-1), s: saturation (0-1), v: value (0-1)\}
*/
-export function RGBtoHSV(rgb: RGB): HSV;
-export function RGBtoHSV(r: number, g: number, b: number): HSV;
-export function RGBtoHSV(r: any, g?: any, b?: any): HSV {
+export function RGBtoHSV(r: number, g: number, b: number): HSV {
'worklet';
- /* eslint-disable */
- if (arguments.length === 1) {
- g = r.g;
- b = r.b;
- r = r.r;
- }
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
const d = max - min;
const s = max === 0 ? 0 : d / max;
const v = max / 255;
- let h;
+ let h = 0;
switch (max) {
- default:
- /* fallthrough */
case min:
- h = 0;
break;
case r:
h = g - b + d * (g < b ? 6 : 0);
@@ -503,50 +492,42 @@ export function RGBtoHSV(r: any, g?: any, b?: any): HSV {
s: s,
v: v,
};
- /* eslint-enable */
}
-/* accepts parameters
- * h Object = {h:x, s:y, v:z}
- * OR
- * h, s, v
- * 0 <= h, s, v <= 1
- * returns 0 <= r, g, b <= 255
+/**
+ *
+ * @param h - hue (0-1)
+ * @param s - saturation (0-1)
+ * @param v - value (0-1)
+ * @returns \{r: red (0-255), g: green (0-255), b: blue (0-255)\}
*/
-function HSVtoRGB(hsv: HSV): RGB;
-function HSVtoRGB(h: number, s: number, v: number): RGB;
-function HSVtoRGB(h: any, s?: any, v?: any) {
- 'worklet';
- /* eslint-disable */
- var r, g, b, i, f, p, q, t;
- if (arguments.length === 1) {
- s = h.s;
- v = h.v;
- h = h.h;
- }
- i = Math.floor(h * 6);
- f = h * 6 - i;
- p = v * (1 - s);
- q = v * (1 - f * s);
- t = v * (1 - (1 - f) * s);
- switch (i % 6) {
+function HSVtoRGB(h: number, s: number, v: number): RGB {
+ ('worklet');
+ let r, g, b;
+
+ const i = Math.floor(h * 6);
+ const f = h * 6 - i;
+ const p = v * (1 - s);
+ const q = v * (1 - f * s);
+ const t = v * (1 - (1 - f) * s);
+ switch ((i % 6) as 0 | 1 | 2 | 3 | 4 | 5) {
case 0:
- (r = v), (g = t), (b = p);
+ [r, g, b] = [v, t, p];
break;
case 1:
- (r = q), (g = v), (b = p);
+ [r, g, b] = [q, v, p];
break;
case 2:
- (r = p), (g = v), (b = t);
+ [r, g, b] = [p, v, t];
break;
case 3:
- (r = p), (g = q), (b = v);
+ [r, g, b] = [p, q, v];
break;
case 4:
- (r = t), (g = p), (b = v);
+ [r, g, b] = [t, p, v];
break;
case 5:
- (r = v), (g = p), (b = q);
+ [r, g, b] = [v, p, q];
break;
}
return {
@@ -554,7 +535,6 @@ function HSVtoRGB(h: any, s?: any, v?: any) {
g: Math.round(g * 255),
b: Math.round(b * 255),
};
- /* eslint-enable */
}
export const hsvToColor = (
From 97975168ed383ac17671e938df057ff087b726d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20=C5=BBelawski?=
<40713406+tjzel@users.noreply.github.com>
Date: Sun, 17 Dec 2023 17:22:09 +0100
Subject: [PATCH 08/54] Fix peer dependency in root (#5501)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
🐓
---
package.json | 6 +-
src/reanimated2/mock.ts | 2 +-
yarn.lock | 281 ++++++++++++++++++++++++----------------
3 files changed, 172 insertions(+), 117 deletions(-)
diff --git a/package.json b/package.json
index f3a5e3d822f..5016de3a76d 100644
--- a/package.json
+++ b/package.json
@@ -138,14 +138,14 @@
"babel-plugin-module-resolver": "^5.0.0",
"clang-format": "^1.6.0",
"code-tag": "^1.1.0",
- "eslint": "^8.44.0",
+ "eslint": "^8.55.0",
"eslint-config-prettier": "^8.3.0",
- "eslint-config-standard": "^16.0.3",
+ "eslint-config-standard": "^17.1.0",
"eslint-import-resolver-babel-module": "^5.3.1",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^27.2.1",
+ "eslint-plugin-n": "^16.4.0",
"eslint-plugin-no-inline-styles": "^1.0.5",
- "eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-standard": "^5.0.0",
diff --git a/src/reanimated2/mock.ts b/src/reanimated2/mock.ts
index c3cd9ff6499..697c5d75f7e 100644
--- a/src/reanimated2/mock.ts
+++ b/src/reanimated2/mock.ts
@@ -1,4 +1,4 @@
-/* eslint-disable node/no-callback-literal */
+/* eslint-disable n/no-callback-literal */
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
'use strict';
diff --git a/yarn.lock b/yarn.lock
index fbcb454506d..db465b58255 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1223,22 +1223,22 @@
dependencies:
"@types/hammerjs" "^2.0.36"
-"@eslint-community/eslint-utils@^4.2.0":
+"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
dependencies:
eslint-visitor-keys "^3.3.0"
-"@eslint-community/regexpp@^4.4.0":
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724"
- integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==
+"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1":
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
-"@eslint/eslintrc@^2.1.0":
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d"
- integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
@@ -1250,10 +1250,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.44.0":
- version "8.44.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af"
- integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==
+"@eslint/js@8.55.0":
+ version "8.55.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6"
+ integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==
"@hapi/hoek@^9.0.0":
version "9.3.0"
@@ -1267,12 +1267,12 @@
dependencies:
"@hapi/hoek" "^9.0.0"
-"@humanwhocodes/config-array@^0.11.10":
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
- integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
+"@humanwhocodes/config-array@^0.11.13":
+ version "0.11.13"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297"
+ integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==
dependencies:
- "@humanwhocodes/object-schema" "^1.2.1"
+ "@humanwhocodes/object-schema" "^2.0.1"
debug "^4.1.1"
minimatch "^3.0.5"
@@ -1281,10 +1281,10 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-"@humanwhocodes/object-schema@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
- integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@humanwhocodes/object-schema@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
+ integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
@@ -2228,6 +2228,11 @@
"@typescript-eslint/types" "5.59.1"
eslint-visitor-keys "^3.3.0"
+"@ungap/structured-clone@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+
abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
@@ -2254,9 +2259,9 @@ acorn@^8.5.0:
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
acorn@^8.9.0:
- version "8.10.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
- integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+ version "8.11.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
+ integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
aggregate-error@^3.0.0:
version "3.1.0"
@@ -2266,7 +2271,7 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^4.0.0"
-ajv@^6.10.0, ajv@^6.12.4, ajv@~6.12.6:
+ajv@^6.12.4, ajv@~6.12.6:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -2742,6 +2747,18 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
+builtin-modules@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
+ integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
+
+builtins@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9"
+ integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==
+ dependencies:
+ semver "^7.0.0"
+
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -3543,15 +3560,20 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
+eslint-compat-utils@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653"
+ integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==
+
eslint-config-prettier@^8.3.0, eslint-config-prettier@^8.5.0:
version "8.8.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348"
integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==
-eslint-config-standard@^16.0.3:
- version "16.0.3"
- resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"
- integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==
+eslint-config-standard@^17.1.0:
+ version "17.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975"
+ integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==
eslint-import-resolver-babel-module@^5.3.1:
version "5.3.2"
@@ -3577,13 +3599,14 @@ eslint-module-utils@^2.7.4:
dependencies:
debug "^3.2.7"
-eslint-plugin-es@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"
- integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==
+eslint-plugin-es-x@^7.5.0:
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92"
+ integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==
dependencies:
- eslint-utils "^2.0.0"
- regexpp "^3.0.0"
+ "@eslint-community/eslint-utils" "^4.1.2"
+ "@eslint-community/regexpp" "^4.6.0"
+ eslint-compat-utils "^0.1.2"
eslint-plugin-eslint-comments@^3.2.0:
version "3.2.0"
@@ -3636,6 +3659,22 @@ eslint-plugin-jest@^27.2.1:
dependencies:
"@typescript-eslint/utils" "^5.10.0"
+eslint-plugin-n@^16.4.0:
+ version "16.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.4.0.tgz#02ff70d2b164319b6d566672969a9c24688a43df"
+ integrity sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ builtins "^5.0.1"
+ eslint-plugin-es-x "^7.5.0"
+ get-tsconfig "^4.7.0"
+ ignore "^5.2.4"
+ is-builtin-module "^3.2.1"
+ is-core-module "^2.12.1"
+ minimatch "^3.1.2"
+ resolve "^1.22.2"
+ semver "^7.5.3"
+
eslint-plugin-no-inline-styles@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/eslint-plugin-no-inline-styles/-/eslint-plugin-no-inline-styles-1.0.5.tgz#c37a7e7a53b46312852d2c44c02cac0df2e700c3"
@@ -3643,18 +3682,6 @@ eslint-plugin-no-inline-styles@^1.0.5:
dependencies:
lodash.get "^4.4.2"
-eslint-plugin-node@^11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
- integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
- dependencies:
- eslint-plugin-es "^3.0.0"
- eslint-utils "^2.0.0"
- ignore "^5.1.1"
- minimatch "^3.0.4"
- resolve "^1.10.1"
- semver "^6.1.0"
-
eslint-plugin-prettier@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b"
@@ -3727,22 +3754,15 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
-eslint-scope@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b"
- integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
dependencies:
esrecurse "^4.3.0"
estraverse "^5.2.0"
-eslint-utils@^2.0.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:
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==
@@ -3752,37 +3772,33 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-eslint-visitor-keys@^3.3.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
- integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
-
-eslint-visitor-keys@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
- integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-eslint@^8.44.0:
- version "8.44.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500"
- integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==
+eslint@^8.55.0:
+ version "8.55.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8"
+ integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
- "@eslint-community/regexpp" "^4.4.0"
- "@eslint/eslintrc" "^2.1.0"
- "@eslint/js" "8.44.0"
- "@humanwhocodes/config-array" "^0.11.10"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.55.0"
+ "@humanwhocodes/config-array" "^0.11.13"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
- ajv "^6.10.0"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
chalk "^4.0.0"
cross-spawn "^7.0.2"
debug "^4.3.2"
doctrine "^3.0.0"
escape-string-regexp "^4.0.0"
- eslint-scope "^7.2.0"
- eslint-visitor-keys "^3.4.1"
- espree "^9.6.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
esquery "^1.4.2"
esutils "^2.0.2"
fast-deep-equal "^3.1.3"
@@ -3792,7 +3808,6 @@ eslint@^8.44.0:
globals "^13.19.0"
graphemer "^1.4.0"
ignore "^5.2.0"
- import-fresh "^3.0.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
is-path-inside "^3.0.3"
@@ -3804,13 +3819,12 @@ eslint@^8.44.0:
natural-compare "^1.4.0"
optionator "^0.9.3"
strip-ansi "^6.0.1"
- strip-json-comments "^3.1.0"
text-table "^0.2.0"
-espree@^9.6.0:
- version "9.6.0"
- resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f"
- integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
dependencies:
acorn "^8.9.0"
acorn-jsx "^5.3.2"
@@ -4079,17 +4093,18 @@ find-up@^5.0.0:
path-exists "^4.0.0"
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==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
dependencies:
- flatted "^3.1.0"
+ flatted "^3.2.9"
+ keyv "^4.5.3"
rimraf "^3.0.2"
-flatted@^3.1.0:
- version "3.2.7"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
- integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+flatted@^3.2.9:
+ version "3.2.9"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
+ integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
flatten@^1.0.2:
version "1.0.3"
@@ -4252,6 +4267,13 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
+get-tsconfig@^4.7.0:
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce"
+ integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
+
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -4295,9 +4317,9 @@ globals@^11.1.0:
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
globals@^13.19.0:
- version "13.20.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
- integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
+ version "13.24.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
dependencies:
type-fest "^0.20.2"
@@ -4476,11 +4498,16 @@ ieee754@^1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0:
+ignore@^5.0.5:
version "5.2.4"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+ignore@^5.2.0, ignore@^5.2.4:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
+ integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
+
image-size@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486"
@@ -4496,7 +4523,7 @@ import-fresh@^2.0.0:
caller-path "^2.0.0"
resolve-from "^3.0.0"
-import-fresh@^3.0.0, import-fresh@^3.2.1:
+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==
@@ -4623,12 +4650,19 @@ is-boolean-object@^1.1.0:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-builtin-module@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169"
+ integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==
+ dependencies:
+ builtin-modules "^3.3.0"
+
is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-is-core-module@^2.1.0:
+is-core-module@^2.1.0, is-core-module@^2.12.1, is-core-module@^2.13.0:
version "2.13.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
@@ -5405,6 +5439,11 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-better-errors@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -5461,6 +5500,13 @@ jsonfile@^6.0.1:
array-includes "^3.1.5"
object.assign "^4.1.3"
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
@@ -6630,9 +6676,9 @@ pump@^3.0.0:
once "^1.3.1"
punycode@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
- integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
pure-rand@^6.0.0:
version "6.0.2"
@@ -6917,11 +6963,6 @@ regexp.prototype.flags@^1.4.3:
define-properties "^1.2.0"
functions-have-names "^1.2.3"
-regexpp@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
- integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
-
regexpu-core@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
@@ -6996,12 +7037,17 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-pkg-maps@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
+ integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
resolve.exports@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
-resolve@^1.1.6, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.21.0, resolve@^1.22.1:
+resolve@^1.1.6, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.21.0, resolve@^1.22.1:
version "1.22.2"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
@@ -7010,6 +7056,15 @@ resolve@^1.1.6, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+resolve@^1.22.2:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
resolve@^2.0.0-next.4:
version "2.0.0-next.4"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
@@ -7124,12 +7179,12 @@ semver@^5.6.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.5, semver@^7.3.7, semver@^7.5.2:
+semver@^7.0.0, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
@@ -7471,7 +7526,7 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
-strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+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==
From a083ef3161ec7fb0f2b94d8cd9882c91c9f5e09e Mon Sep 17 00:00:00 2001
From: Tomek Zawadzki
Date: Mon, 18 Dec 2023 18:45:00 +0100
Subject: [PATCH 09/54] Update versions in issue template (#5507)
## Summary
## Test plan
---
.github/ISSUE_TEMPLATE/bug-report.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
index 5d7e3d09f02..5ac4a0f74b1 100755
--- a/.github/ISSUE_TEMPLATE/bug-report.yml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -57,7 +57,7 @@ body:
attributes:
label: Reanimated version
description: What version of react-native-reanimated are you using?
- placeholder: 2.9.0
+ placeholder: 3.6.1
validations:
required: true
@@ -66,7 +66,7 @@ body:
attributes:
label: React Native version
description: What version of react-native are you using?
- placeholder: 0.69.0
+ placeholder: 0.73.1
validations:
required: true
From 96d8426461e98440d62f6da06442e8ab6bdfdbc7 Mon Sep 17 00:00:00 2001
From: Abhishek <44975760+azashi@users.noreply.github.com>
Date: Tue, 19 Dec 2023 16:55:49 +0530
Subject: [PATCH 10/54] Layout-transition docs - Empty brackets removed (#5502)
## Summary
Layout transition docs had empty brackets, which are removed in this PR
## Test plan
---
docs/docs/layout-animations/layout-transitions.mdx | 2 --
1 file changed, 2 deletions(-)
diff --git a/docs/docs/layout-animations/layout-transitions.mdx b/docs/docs/layout-animations/layout-transitions.mdx
index e88b2257ca9..5c239b17c23 100644
--- a/docs/docs/layout-animations/layout-transitions.mdx
+++ b/docs/docs/layout-animations/layout-transitions.mdx
@@ -108,8 +108,6 @@ Fading transition, animates the opacity of component, so it will disappear with
#### Example
-{" "}
-