Skip to content

Commit 6c4d8c3

Browse files
committedMar 28, 2022
check if component is mounted or not based on props, fix arrow rotation, patch reanimated-collapsible-helpers to use reanimated 2 Easings and added some helper functions to support mounted/unmounted component
1 parent e6d31c2 commit 6c4d8c3

File tree

5 files changed

+266
-28
lines changed

5 files changed

+266
-28
lines changed
 

‎README.md

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
## React Native Nested Comments With Line Indicators
22

3-
### Uses reanimated 2 to collapse comments, react-native-svg for the line drawing and FlatList
3+
### Uses reanimated 2 to collapse comments via [`reanimated-collapsible-helpers`](https://github.com/Trancever/reanimated-collapsible-helpers), [`react-native-svg`](https://github.com/react-native-svg/react-native-svg) for the line drawing and FlatList.
44

5-
#### Notice:
5+
---
6+
#### Notice 1:
67
Code and typings are rough and maybe ugly, for sure it can be improved. It's just an MVP to get it working. If you have suggestions or improvements feel free to Pull Request.
78

9+
#### Notice 2:
10+
If you want to use reanimated 1 then delete the patch folder
11+
12+
#### Notice 3:
13+
14+
`CollapsibleView` was inspired by [Eliav2/react-native-collapsible-view](https://github.com/Eliav2/react-native-collapsible-view)
15+
16+
---
817
Supports 2 level of nesting like major social apps.
918

1019
#### Battle tested with hundreds of comments with 0 lag.
1120

21+
1222
The struggle to built it was real...
1323

1424
Demo:

‎package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"ios": "react-native run-ios",
88
"start": "react-native start",
99
"test": "jest",
10-
"lint": "eslint . --ext .js,.jsx,.ts,.tsx"
10+
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
11+
"postinstall": "patch-package && jetify"
1112
},
1213
"dependencies": {
1314
"date-fns": "^2.28.0",
@@ -33,6 +34,7 @@
3334
"eslint": "^7.14.0",
3435
"jest": "^26.6.3",
3536
"metro-react-native-babel-preset": "^0.66.2",
37+
"patch-package": "^6.4.7",
3638
"prettier": "^2.6.1",
3739
"react-test-renderer": "17.0.2",
3840
"typescript": "^4.4.4"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
diff --git a/node_modules/reanimated-collapsible-helpers/lib/typescript/src/AnimatedSection.d.ts b/node_modules/reanimated-collapsible-helpers/lib/typescript/src/AnimatedSection.d.ts
2+
index 768068e..651f01b 100644
3+
--- a/node_modules/reanimated-collapsible-helpers/lib/typescript/src/AnimatedSection.d.ts
4+
+++ b/node_modules/reanimated-collapsible-helpers/lib/typescript/src/AnimatedSection.d.ts
5+
@@ -3,11 +3,17 @@ import { LayoutChangeEvent, StyleProp, ViewStyle } from 'react-native';
6+
import Animated from 'react-native-reanimated';
7+
import type { State } from './types';
8+
declare type Props = {
9+
- children: React.ReactNode;
10+
- onLayout: (event: LayoutChangeEvent) => void;
11+
- animatedHeight: Animated.Node<number>;
12+
- state: State;
13+
- style?: StyleProp<Animated.AnimateStyle<ViewStyle>>;
14+
+ children: React.ReactNode;
15+
+ onLayout: (event: LayoutChangeEvent) => void;
16+
+ animatedHeight: Animated.Node<number>;
17+
+ state: State;
18+
+ style?: StyleProp<Animated.AnimateStyle<ViewStyle>>;
19+
};
20+
-export declare function AnimatedSection({ children, onLayout, animatedHeight, state, style, }: Props): JSX.Element;
21+
+export declare function AnimatedSection({
22+
+ children,
23+
+ onLayout,
24+
+ animatedHeight,
25+
+ state,
26+
+ style,
27+
+}: Props): JSX.Element;
28+
export {};
29+
diff --git a/node_modules/reanimated-collapsible-helpers/lib/typescript/src/types.d.ts b/node_modules/reanimated-collapsible-helpers/lib/typescript/src/types.d.ts
30+
index 039c025..3912f9e 100644
31+
--- a/node_modules/reanimated-collapsible-helpers/lib/typescript/src/types.d.ts
32+
+++ b/node_modules/reanimated-collapsible-helpers/lib/typescript/src/types.d.ts
33+
@@ -2,5 +2,8 @@ import type Animated from 'react-native-reanimated';
34+
export declare type State = 'expanded' | 'collapsed';
35+
export declare type Config = {
36+
duration?: number;
37+
- easing?: Animated.EasingFunction;
38+
+ easing?: Animated.EasingNodeFunction;
39+
+ state: string;
40+
+ show: boolean | null | undefined;
41+
+ unmountOnCollapse: boolean | null | undefined;
42+
};
43+
diff --git a/node_modules/reanimated-collapsible-helpers/lib/typescript/src/useCollapsible.d.ts b/node_modules/reanimated-collapsible-helpers/lib/typescript/src/useCollapsible.d.ts
44+
index a76dd60..fa309f4 100644
45+
--- a/node_modules/reanimated-collapsible-helpers/lib/typescript/src/useCollapsible.d.ts
46+
+++ b/node_modules/reanimated-collapsible-helpers/lib/typescript/src/useCollapsible.d.ts
47+
@@ -2,9 +2,11 @@ import type { LayoutChangeEvent } from 'react-native';
48+
import Animated from 'react-native-reanimated';
49+
import type { State, Config } from './types';
50+
export declare function useCollapsible(config?: Config): {
51+
- onLayout: (event: LayoutChangeEvent) => void;
52+
- onPress: () => void;
53+
- animatedHeight: Animated.Node<number>;
54+
- height: number;
55+
- state: State;
56+
+ onLayout: (event: LayoutChangeEvent) => void;
57+
+ onPress: () => void;
58+
+ animatedHeight: Animated.Node<number>;
59+
+ height: number;
60+
+ state: State;
61+
+ setMounted: (mounted: boolean) => void;
62+
+ mounted: boolean;
63+
};
64+
diff --git a/node_modules/reanimated-collapsible-helpers/src/reanimatedHelpers.ts b/node_modules/reanimated-collapsible-helpers/src/reanimatedHelpers.ts
65+
index b26a76e..b6a68cb 100644
66+
--- a/node_modules/reanimated-collapsible-helpers/src/reanimatedHelpers.ts
67+
+++ b/node_modules/reanimated-collapsible-helpers/src/reanimatedHelpers.ts
68+
@@ -1,22 +1,14 @@
69+
-import Animated, { Easing } from 'react-native-reanimated';
70+
+import Animated, { EasingNode } from 'react-native-reanimated';
71+
72+
-const {
73+
- Value,
74+
- set,
75+
- cond,
76+
- startClock,
77+
- clockRunning,
78+
- timing,
79+
- stopClock,
80+
- block,
81+
-} = Animated;
82+
+const { Value, set, cond, startClock, clockRunning, timing, stopClock, block } =
83+
+ Animated;
84+
85+
export function runTiming(
86+
clock: Animated.Clock,
87+
value: Animated.Value<number>,
88+
dest: Animated.Value<number>,
89+
duration: number = 250,
90+
- easing: Animated.EasingFunction = Easing.out(Easing.ease)
91+
+ easing: Animated.EasingNodeFunction = EasingNode.out(EasingNode.ease)
92+
) {
93+
const state = {
94+
finished: new Value(0),
95+
diff --git a/node_modules/reanimated-collapsible-helpers/src/types.ts b/node_modules/reanimated-collapsible-helpers/src/types.ts
96+
index 63710b0..84b6181 100644
97+
--- a/node_modules/reanimated-collapsible-helpers/src/types.ts
98+
+++ b/node_modules/reanimated-collapsible-helpers/src/types.ts
99+
@@ -4,5 +4,10 @@ export type State = 'expanded' | 'collapsed';
100+
101+
export type Config = {
102+
duration?: number;
103+
- easing?: Animated.EasingFunction;
104+
+ easing?: Animated.EasingNodeFunction;
105+
+ state: string;
106+
+ show: boolean | null | undefined;
107+
+ unmountOnCollapse: boolean | null | undefined;
108+
+ setMounted: () => void;
109+
+ mounted: boolean;
110+
};
111+
diff --git a/node_modules/reanimated-collapsible-helpers/src/useCollapsible.ts b/node_modules/reanimated-collapsible-helpers/src/useCollapsible.ts
112+
index 2cea421..3f78337 100644
113+
--- a/node_modules/reanimated-collapsible-helpers/src/useCollapsible.ts
114+
+++ b/node_modules/reanimated-collapsible-helpers/src/useCollapsible.ts
115+
@@ -1,4 +1,4 @@
116+
-import React from 'react';
117+
+import React, { useCallback } from 'react';
118+
import type { LayoutChangeEvent } from 'react-native';
119+
import Animated from 'react-native-reanimated';
120+
121+
@@ -9,7 +9,9 @@ const { Clock, Value } = Animated;
122+
123+
export function useCollapsible(config?: Config) {
124+
const [height, setHeight] = React.useState(0);
125+
- const [state, setState] = React.useState<State>('collapsed');
126+
+ const [state, setState] = React.useState<State>(
127+
+ config?.state === 'expanded' ? 'expanded' : 'collapsed'
128+
+ );
129+
130+
const { current: clock } = React.useRef(new Clock());
131+
const { current: progress } = React.useRef(new Value<number>(0));
132+
@@ -18,11 +20,22 @@ export function useCollapsible(config?: Config) {
133+
runTiming(clock, progress, animation, config?.duration, config?.easing)
134+
);
135+
136+
+ const [mounted, setMounted] = React.useState(
137+
+ config?.state === 'expanded' ? true : false
138+
+ );
139+
+
140+
+ const handleAnimationEnd = () => {
141+
+ if (config?.unmountOnCollapse && !config?.show) setMounted(false);
142+
+ };
143+
+
144+
React.useEffect(() => {
145+
if (state === 'collapsed') {
146+
animation.setValue(0);
147+
+ setMounted(false);
148+
+ handleAnimationEnd();
149+
} else {
150+
animation.setValue(height);
151+
+ setMounted(true);
152+
}
153+
}, [state, height, animation]);
154+
155+
@@ -47,5 +60,7 @@ export function useCollapsible(config?: Config) {
156+
animatedHeight,
157+
height,
158+
state,
159+
+ mounted,
160+
+ setMounted,
161+
};
162+
}

‎src/components/CollapsibleView.tsx

+18-21
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ const CollapsibleView = ({
2323
expanded = null,
2424
unmountOnCollapse = false,
2525
duration = 200,
26-
collapsibleProps = {},
2726
collapsibleContainerStyle = {},
2827
arrowStyling = {},
2928
noArrow = false,
@@ -39,18 +38,19 @@ const CollapsibleView = ({
3938
isParentLast = false,
4039
parentCommentLength = 0
4140
}) => {
42-
const {animatedHeight, height, onPress, onLayout, state} = useCollapsible();
43-
44-
const controlled = expanded !== null;
4541
const [show, setShow] = useState<boolean | null | undefined>(initExpanded);
46-
const [mounted, setMounted] = useState(initExpanded);
42+
43+
const {animatedHeight, onPress, onLayout, state, mounted, setMounted} =
44+
useCollapsible({
45+
state: initExpanded ? 'expanded' : 'collapsed',
46+
unmountOnCollapse,
47+
show
48+
});
4749

4850
const rotateAnim = useSharedValue(0);
4951

50-
if (controlled) {
51-
if (!mounted && expanded) {
52-
setMounted(true);
53-
}
52+
if (!mounted && expanded) {
53+
setMounted(true);
5454
}
5555

5656
const rotation = useDerivedValue(() => {
@@ -85,16 +85,14 @@ const CollapsibleView = ({
8585
);
8686

8787
const handleToggleShow = () => {
88-
if (!controlled) {
89-
if (!mounted) {
90-
if (!show) {
91-
onPress();
92-
setMounted(true);
93-
}
94-
} else {
88+
if (!mounted) {
89+
if (!show) {
9590
onPress();
96-
setShow(!show);
91+
setMounted(true);
9792
}
93+
} else {
94+
onPress();
95+
setShow(!show);
9896
}
9997
};
10098

@@ -103,7 +101,6 @@ const CollapsibleView = ({
103101
// not be interrupted.
104102
if (mounted) {
105103
setShow(true);
106-
// handleArrowRotate();
107104
}
108105
}, [mounted]);
109106

@@ -118,12 +115,12 @@ const CollapsibleView = ({
118115

119116
useEffect(() => {
120117
if (mounted) {
121-
handleArrowRotate(!show);
118+
handleArrowRotate(show);
122119
}
123-
if (controlled && show !== expanded) {
120+
if (show !== expanded) {
124121
setShow(expanded);
125122
}
126-
}, [controlled, expanded, handleArrowRotate, mounted, show]);
123+
}, [expanded, handleArrowRotate, mounted, show]);
127124

128125
return (
129126
<View style={styles.container}>

‎yarn.lock

+71-4
Original file line numberDiff line numberDiff line change
@@ -1602,6 +1602,11 @@
16021602
"@typescript-eslint/types" "5.16.0"
16031603
eslint-visitor-keys "^3.0.0"
16041604

1605+
"@yarnpkg/lockfile@^1.1.0":
1606+
version "1.1.0"
1607+
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
1608+
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
1609+
16051610
abab@^2.0.3, abab@^2.0.5:
16061611
version "2.0.5"
16071612
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
@@ -2448,7 +2453,7 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0:
24482453
js-yaml "^3.13.1"
24492454
parse-json "^4.0.0"
24502455

2451-
cross-spawn@^6.0.0:
2456+
cross-spawn@^6.0.0, cross-spawn@^6.0.5:
24522457
version "6.0.5"
24532458
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
24542459
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
@@ -3264,6 +3269,13 @@ find-up@^4.0.0, find-up@^4.1.0:
32643269
locate-path "^5.0.0"
32653270
path-exists "^4.0.0"
32663271

3272+
find-yarn-workspace-root@^2.0.0:
3273+
version "2.0.0"
3274+
resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd"
3275+
integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==
3276+
dependencies:
3277+
micromatch "^4.0.2"
3278+
32673279
flat-cache@^3.0.4:
32683280
version "3.0.4"
32693281
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
@@ -3322,6 +3334,15 @@ fs-extra@^1.0.0:
33223334
jsonfile "^2.1.0"
33233335
klaw "^1.0.0"
33243336

3337+
fs-extra@^7.0.1:
3338+
version "7.0.1"
3339+
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
3340+
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
3341+
dependencies:
3342+
graceful-fs "^4.1.2"
3343+
jsonfile "^4.0.0"
3344+
universalify "^0.1.0"
3345+
33253346
fs-extra@^8.1.0:
33263347
version "8.1.0"
33273348
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@@ -3925,7 +3946,7 @@ is-wsl@^1.1.0:
39253946
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
39263947
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
39273948

3928-
is-wsl@^2.2.0:
3949+
is-wsl@^2.1.1, is-wsl@^2.2.0:
39293950
version "2.2.0"
39303951
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
39313952
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
@@ -4562,6 +4583,13 @@ kind-of@^6.0.0, kind-of@^6.0.2:
45624583
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
45634584
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
45644585

4586+
klaw-sync@^6.0.0:
4587+
version "6.0.0"
4588+
resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c"
4589+
integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==
4590+
dependencies:
4591+
graceful-fs "^4.1.11"
4592+
45654593
klaw@^1.0.0:
45664594
version "1.3.1"
45674595
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
@@ -5362,6 +5390,14 @@ open@^6.2.0:
53625390
dependencies:
53635391
is-wsl "^1.1.0"
53645392

5393+
open@^7.4.2:
5394+
version "7.4.2"
5395+
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
5396+
integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==
5397+
dependencies:
5398+
is-docker "^2.0.0"
5399+
is-wsl "^2.1.1"
5400+
53655401
optionator@^0.8.1:
53665402
version "0.8.3"
53675403
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@@ -5403,7 +5439,7 @@ ora@^3.4.0:
54035439
strip-ansi "^5.2.0"
54045440
wcwidth "^1.0.1"
54055441

5406-
os-tmpdir@^1.0.0:
5442+
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
54075443
version "1.0.2"
54085444
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
54095445
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
@@ -5484,6 +5520,25 @@ pascalcase@^0.1.1:
54845520
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
54855521
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
54865522

5523+
patch-package@^6.4.7:
5524+
version "6.4.7"
5525+
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148"
5526+
integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==
5527+
dependencies:
5528+
"@yarnpkg/lockfile" "^1.1.0"
5529+
chalk "^2.4.2"
5530+
cross-spawn "^6.0.5"
5531+
find-yarn-workspace-root "^2.0.0"
5532+
fs-extra "^7.0.1"
5533+
is-ci "^2.0.0"
5534+
klaw-sync "^6.0.0"
5535+
minimist "^1.2.0"
5536+
open "^7.4.2"
5537+
rimraf "^2.6.3"
5538+
semver "^5.6.0"
5539+
slash "^2.0.0"
5540+
tmp "^0.0.33"
5541+
54875542
path-exists@^3.0.0:
54885543
version "3.0.0"
54895544
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -6011,7 +6066,7 @@ reusify@^1.0.4:
60116066
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
60126067
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
60136068

6014-
rimraf@^2.5.4:
6069+
rimraf@^2.5.4, rimraf@^2.6.3:
60156070
version "2.7.1"
60166071
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
60176072
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@@ -6266,6 +6321,11 @@ sisteransi@^1.0.5:
62666321
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
62676322
integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
62686323

6324+
slash@^2.0.0:
6325+
version "2.0.0"
6326+
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
6327+
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
6328+
62696329
slash@^3.0.0:
62706330
version "3.0.0"
62716331
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@@ -6645,6 +6705,13 @@ through2@^2.0.1:
66456705
readable-stream "~2.3.6"
66466706
xtend "~4.0.1"
66476707

6708+
tmp@^0.0.33:
6709+
version "0.0.33"
6710+
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
6711+
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
6712+
dependencies:
6713+
os-tmpdir "~1.0.2"
6714+
66486715
tmpl@1.0.5:
66496716
version "1.0.5"
66506717
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"

0 commit comments

Comments
 (0)
Please sign in to comment.