Merge branch 'main' into release

This commit is contained in:
xmflsct 2023-02-03 14:54:28 +01:00
commit c05554746f
51 changed files with 1041 additions and 626 deletions

1
.gitignore vendored
View File

@ -32,6 +32,7 @@ DerivedData
*.xcuserstate
project.xcworkspace
ios/.xcode.env.local
ios/containers
# Android/IntelliJ
#

View File

@ -21,3 +21,343 @@ index 5b21cd59c40a5754f5d19c77e2a0eb0229925911..19d82f826e88125c5e6d87ee7c348fac
annotationProcessor "com.github.bumptech.glide:compiler:${glideVersion}"
+ implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.12.0'
}
diff --git a/android/src/main/java/com/dylanvann/fastimage/FastImageEnterTransition.java b/android/src/main/java/com/dylanvann/fastimage/FastImageEnterTransition.java
new file mode 100644
index 0000000000000000000000000000000000000000..55e3b4e0d463654f62d942ba05c2a5e51ae9d6d7
--- /dev/null
+++ b/android/src/main/java/com/dylanvann/fastimage/FastImageEnterTransition.java
@@ -0,0 +1,6 @@
+package com.dylanvann.fastimage;
+
+public enum FastImageEnterTransition {
+ TRANSITION_NONE,
+ FADE_IN
+}
diff --git a/android/src/main/java/com/dylanvann/fastimage/FastImageTransitions.java b/android/src/main/java/com/dylanvann/fastimage/FastImageTransitions.java
new file mode 100644
index 0000000000000000000000000000000000000000..d764cc4b8d110f087120a4f0dc5d986754806dec
--- /dev/null
+++ b/android/src/main/java/com/dylanvann/fastimage/FastImageTransitions.java
@@ -0,0 +1,20 @@
+package com.dylanvann.fastimage;
+
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
+import com.bumptech.glide.TransitionOptions;
+import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
+import android.view.animation.DecelerateInterpolator;
+
+public class FastImageTransitions {
+ static final DecelerateInterpolator mInterpolator = new DecelerateInterpolator();
+
+ public static TransitionOptions getEnterTransition(FastImageEnterTransition transition, int duration) {
+ switch (transition) {
+ case FADE_IN:
+ return DrawableTransitionOptions.withCrossFade(duration);
+
+ default:
+ throw new JSApplicationIllegalArgumentException("FastImage, invalid enterTransition argument");
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/src/main/java/com/dylanvann/fastimage/FastImageViewConverter.java b/android/src/main/java/com/dylanvann/fastimage/FastImageViewConverter.java
index 86ca00d018d7ded0edff733373d80976c8dbb961..e6220f57b38a3fe3ae9d5a75228f791e0ec978bb 100644
--- a/android/src/main/java/com/dylanvann/fastimage/FastImageViewConverter.java
+++ b/android/src/main/java/com/dylanvann/fastimage/FastImageViewConverter.java
@@ -50,6 +50,12 @@ class FastImageViewConverter {
put("center", ScaleType.CENTER_INSIDE);
}};
+ private static final Map<String, FastImageEnterTransition> FAST_IMAGE_ENTER_TRANSITION_MAP =
+ new HashMap<String, FastImageEnterTransition>() {{
+ put("none", FastImageEnterTransition.TRANSITION_NONE);
+ put("fadeIn", FastImageEnterTransition.FADE_IN);
+ }};
+
// Resolve the source uri to a file path that android understands.
static @Nullable
FastImageSource getImageSource(Context context, @Nullable ReadableMap source) {
@@ -125,6 +131,10 @@ class FastImageViewConverter {
return getValueFromSource("cache", "immutable", FAST_IMAGE_CACHE_CONTROL_MAP, source);
}
+ static FastImageEnterTransition getEnterTransition(String propValue) {
+ return getValue("enterTransition", "none", FAST_IMAGE_ENTER_TRANSITION_MAP, propValue);
+ }
+
private static Priority getPriority(ReadableMap source) {
return getValueFromSource("priority", "normal", FAST_IMAGE_PRIORITY_MAP, source);
}
diff --git a/android/src/main/java/com/dylanvann/fastimage/FastImageViewManager.java b/android/src/main/java/com/dylanvann/fastimage/FastImageViewManager.java
index c7a795471c8f8b48163c778836406bc5ead75dab..53b481547b44224e7791a8d3f39815c9c9a4be59 100644
--- a/android/src/main/java/com/dylanvann/fastimage/FastImageViewManager.java
+++ b/android/src/main/java/com/dylanvann/fastimage/FastImageViewManager.java
@@ -83,6 +83,17 @@ class FastImageViewManager extends SimpleViewManager<FastImageViewWithUrl> imple
view.setScaleType(scaleType);
}
+ @ReactProp(name = "enterTransition")
+ public void setEnterTransition(FastImageViewWithUrl view, String enterTransition) {
+ final FastImageEnterTransition transition = FastImageViewConverter.getEnterTransition(enterTransition);
+ view.setEnterTransition(transition);
+ }
+
+ @ReactProp(name = "transitionDuration")
+ public void setTransitionDuration(FastImageViewWithUrl view, int transitionDuration) {
+ view.setTransitionDuration(transitionDuration);
+ }
+
@Override
public void onDropViewInstance(@NonNull FastImageViewWithUrl view) {
// This will cancel existing requests.
diff --git a/android/src/main/java/com/dylanvann/fastimage/FastImageViewWithUrl.java b/android/src/main/java/com/dylanvann/fastimage/FastImageViewWithUrl.java
index 34fcf898d17d82fd52375e9028b71ad815b9b15b..fd57ac68de093d2a8ee53aeede45328c8d52aa39 100644
--- a/android/src/main/java/com/dylanvann/fastimage/FastImageViewWithUrl.java
+++ b/android/src/main/java/com/dylanvann/fastimage/FastImageViewWithUrl.java
@@ -30,6 +30,8 @@ class FastImageViewWithUrl extends AppCompatImageView {
private boolean mNeedsReload = false;
private ReadableMap mSource = null;
private Drawable mDefaultSource = null;
+ private FastImageEnterTransition mEnterTransition = FastImageEnterTransition.TRANSITION_NONE;
+ private int mTransitionDuration = 350;
public GlideUrl glideUrl;
@@ -47,6 +49,14 @@ class FastImageViewWithUrl extends AppCompatImageView {
mDefaultSource = source;
}
+ public void setEnterTransition(@Nullable FastImageEnterTransition transition) {
+ mEnterTransition = transition;
+ }
+
+ public void setTransitionDuration(int duration) {
+ mTransitionDuration = duration == 0 ? 350 : duration;
+ }
+
private boolean isNullOrEmpty(final String url) {
return url == null || url.trim().isEmpty();
}
@@ -147,6 +157,10 @@ class FastImageViewWithUrl extends AppCompatImageView {
if (key != null)
builder.listener(new FastImageRequestListener(key));
+ if (mEnterTransition != FastImageEnterTransition.TRANSITION_NONE) {
+ builder.transition(FastImageTransitions.getEnterTransition(mEnterTransition, mTransitionDuration));
+ }
+
builder.into(this);
}
}
diff --git a/dist/index.cjs.js b/dist/index.cjs.js
index 2df6a29769978d8d947dfb50b422e1f56bd97fb6..f3904e20edac5f19cc26f41a4ff02eecd73ac627 100644
--- a/dist/index.cjs.js
+++ b/dist/index.cjs.js
@@ -9,6 +9,10 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
+const enterTransition = {
+ none: 'none',
+ fadeIn: 'fadeIn'
+}
const resizeMode = {
contain: 'contain',
cover: 'cover',
@@ -115,6 +119,7 @@ const FastImageComponent = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PU
}, props)));
FastImageComponent.displayName = 'FastImage';
const FastImage = FastImageComponent;
+FastImage.enterTransition = enterTransition
FastImage.resizeMode = resizeMode;
FastImage.cacheControl = cacheControl;
FastImage.priority = priority;
diff --git a/dist/index.d.ts b/dist/index.d.ts
index 5abb7c98b767cd0709b53f5ab2dd50c752a9377b..2da22817e3136673d40a177ae8c9fc2209f143d8 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -1,5 +1,10 @@
import React from 'react';
import { FlexStyle, LayoutChangeEvent, ShadowStyleIOS, StyleProp, TransformsStyle, ImageRequireSource, AccessibilityProps, ViewProps, ColorValue } from 'react-native';
+export declare type EnterTransition = 'none' | 'fadeIn';
+declare const enterTransition: {
+ readonly none: "none";
+ readonly fadeIn: "fadeIn";
+};
export declare type ResizeMode = 'contain' | 'cover' | 'stretch' | 'center';
declare const resizeMode: {
readonly contain: "contain";
@@ -57,6 +62,16 @@ export interface FastImageProps extends AccessibilityProps, ViewProps {
defaultSource?: ImageRequireSource;
resizeMode?: ResizeMode;
fallback?: boolean;
+ /**
+ * Transition durations.
+ * @default none
+ */
+ enterTransition?: EnterTransition
+ /**
+ * Enter transition duration in ms.
+ * @default 500ms
+ */
+ transitionDuration?: number
onLoadStart?(): void;
onProgress?(event: OnProgressEvent): void;
onLoad?(event: OnLoadEvent): void;
@@ -91,6 +106,7 @@ export interface FastImageProps extends AccessibilityProps, ViewProps {
children?: React.ReactNode;
}
export interface FastImageStaticProperties {
+ enterTransition: typeof enterTransition;
resizeMode: typeof resizeMode;
priority: typeof priority;
cacheControl: typeof cacheControl;
diff --git a/dist/index.js b/dist/index.js
index 58e0308bd44836aad3e4979b5c1151083956c295..5853b3b2fd05c91be8c70819fe6fc45606f26f8d 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -2,6 +2,10 @@ import _extends from '@babel/runtime/helpers/extends';
import React, { forwardRef, memo } from 'react';
import { NativeModules, StyleSheet, requireNativeComponent, Image, View, Platform } from 'react-native';
+const enterTransition = {
+ none: 'none',
+ fadeIn: 'fadeIn'
+}
const resizeMode = {
contain: 'contain',
cover: 'cover',
@@ -57,6 +61,8 @@ function FastImageBase({
children,
// eslint-disable-next-line no-shadow
resizeMode = 'cover',
+ enterTransition = 'none',
+ transitionDuration = 350,
forwardedRef,
...props
}) {
@@ -79,7 +85,9 @@ function FastImageBase({
onLoad: onLoad,
onError: onError,
onLoadEnd: onLoadEnd,
- resizeMode: resizeMode
+ resizeMode: resizeMode,
+ enterTransition: enterTransition,
+ transitionDuration: transitionDuration
})), children);
}
@@ -98,7 +106,9 @@ function FastImageBase({
onFastImageLoad: onLoad,
onFastImageError: onError,
onFastImageLoadEnd: onLoadEnd,
- resizeMode: resizeMode
+ resizeMode: resizeMode,
+ enterTransition: enterTransition,
+ transitionDuration: transitionDuration
})), children);
}
@@ -108,6 +118,7 @@ const FastImageComponent = /*#__PURE__*/forwardRef((props, ref) => /*#__PURE__*/
}, props)));
FastImageComponent.displayName = 'FastImage';
const FastImage = FastImageComponent;
+FastImage.enterTransition = enterTransition
FastImage.resizeMode = resizeMode;
FastImage.cacheControl = cacheControl;
FastImage.priority = priority;
diff --git a/ios/FastImage/FFFastImageView.h b/ios/FastImage/FFFastImageView.h
index e52fca79882ad2a678487a46b2fe158427e06f3a..6c9c41b0b1a3c967a3715a24bb692447b76ef365 100644
--- a/ios/FastImage/FFFastImageView.h
+++ b/ios/FastImage/FFFastImageView.h
@@ -7,6 +7,7 @@
#import <React/RCTResizeMode.h>
#import "FFFastImageSource.h"
+#import "FFFastImageViewManager.h"
@interface FFFastImageView : SDAnimatedImageView
@@ -16,6 +17,8 @@
@property (nonatomic, copy) RCTDirectEventBlock onFastImageLoad;
@property (nonatomic, copy) RCTDirectEventBlock onFastImageLoadEnd;
@property (nonatomic, assign) RCTResizeMode resizeMode;
+@property (nonatomic, assign) FFFEnterTransition enterTransition;
+@property (nonatomic, assign) NSTimeInterval transitionDuration;
@property (nonatomic, strong) FFFastImageSource *source;
@property (nonatomic, strong) UIImage *defaultSource;
@property (nonatomic, strong) UIColor *imageColor;
diff --git a/ios/FastImage/FFFastImageView.m b/ios/FastImage/FFFastImageView.m
index f7100815e652539b29b1fa70ff1477c5f5db08dc..ecb79eafe566fe52090adada3cdf16eb10a67513 100644
--- a/ios/FastImage/FFFastImageView.m
+++ b/ios/FastImage/FFFastImageView.m
@@ -71,6 +71,18 @@ - (void) setImageColor: (UIColor*)imageColor {
}
}
+- (void) setTransitionDuration: (NSTimeInterval)transitionDuration {
+ self.sd_imageTransition.duration = transitionDuration;
+}
+
+- (void) setEnterTransition: (FFFEnterTransition)enterTransition {
+ switch (enterTransition) {
+ case FFFFadeIn:
+ self.sd_imageTransition = SDWebImageTransition.fadeTransition;
+ break;
+ }
+}
+
- (UIImage*) makeImage: (UIImage*)image withTint: (UIColor*)color {
UIImage* newImage = [image imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate];
UIGraphicsBeginImageContextWithOptions(image.size, NO, newImage.scale);
diff --git a/ios/FastImage/FFFastImageViewManager.h b/ios/FastImage/FFFastImageViewManager.h
index 8ba6020e2c6e5757ed778d00e3f43a6ff4c1d50a..a269669301ea00ef3c2714123d17e822094635d6 100644
--- a/ios/FastImage/FFFastImageViewManager.h
+++ b/ios/FastImage/FFFastImageViewManager.h
@@ -1,5 +1,10 @@
#import <React/RCTViewManager.h>
+typedef NS_ENUM(NSInteger, FFFEnterTransition) {
+ FFFTransitionNone,
+ FFFFadeIn,
+};
+
@interface FFFastImageViewManager : RCTViewManager
@end
diff --git a/ios/FastImage/FFFastImageViewManager.m b/ios/FastImage/FFFastImageViewManager.m
index 84ca94e26e546d4d139dabca6c3efd0a890eda63..2184bac31f0d547e6119356bb4fc7931be87446d 100644
--- a/ios/FastImage/FFFastImageViewManager.m
+++ b/ios/FastImage/FFFastImageViewManager.m
@@ -13,6 +13,8 @@ - (FFFastImageView*)view {
}
RCT_EXPORT_VIEW_PROPERTY(source, FFFastImageSource)
+RCT_EXPORT_VIEW_PROPERTY(enterTransition, FFFEnterTransition)
+RCT_EXPORT_VIEW_PROPERTY(transitionDuration, NSTimeInterval)
RCT_EXPORT_VIEW_PROPERTY(defaultSource, UIImage)
RCT_EXPORT_VIEW_PROPERTY(resizeMode, RCTResizeMode)
RCT_EXPORT_VIEW_PROPERTY(onFastImageLoadStart, RCTDirectEventBlock)
diff --git a/ios/FastImage/RCTConvert+FFFastImage.m b/ios/FastImage/RCTConvert+FFFastImage.m
index 43f8922157655a7497f56a3909ef6b2a886f07d8..0705f8e05f44f3053e7239fcc9a30d986e7aaab7 100644
--- a/ios/FastImage/RCTConvert+FFFastImage.m
+++ b/ios/FastImage/RCTConvert+FFFastImage.m
@@ -1,5 +1,6 @@
#import "RCTConvert+FFFastImage.h"
#import "FFFastImageSource.h"
+#import "FFFastImageViewManager.h"
@implementation RCTConvert (FFFastImage)
@@ -15,6 +16,11 @@ @implementation RCTConvert (FFFastImage)
@"cacheOnly": @(FFFCacheControlCacheOnly),
}), FFFCacheControlImmutable, integerValue);
+RCT_ENUM_CONVERTER(FFFEnterTransition, (@{
+ @"none": @(FFFTransitionNone),
+ @"fadeIn": @(FFFFadeIn),
+ }), FFFTransitionNone, integerValue);
+
+ (FFFastImageSource *)FFFastImageSource:(id)json {
if (!json) {
return nil;

View File

@ -47,17 +47,17 @@ PODS:
- EXSplashScreen (0.17.5):
- ExpoModulesCore
- React-Core
- FBLazyVector (0.70.6)
- FBReactNativeSpec (0.70.6):
- FBLazyVector (0.70.7)
- FBReactNativeSpec (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.6)
- RCTTypeSafety (= 0.70.6)
- React-Core (= 0.70.6)
- React-jsi (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- RCTRequired (= 0.70.7)
- RCTTypeSafety (= 0.70.7)
- React-Core (= 0.70.7)
- React-jsi (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- fmt (6.2.1)
- glog (0.3.5)
- hermes-engine (0.70.6)
- hermes-engine (0.70.7)
- libevent (2.1.12)
- libwebp (1.2.4):
- libwebp/demux (= 1.2.4)
@ -88,214 +88,214 @@ PODS:
- fmt (~> 6.2.1)
- glog
- libevent
- RCTRequired (0.70.6)
- RCTTypeSafety (0.70.6):
- FBLazyVector (= 0.70.6)
- RCTRequired (= 0.70.6)
- React-Core (= 0.70.6)
- React (0.70.6):
- React-Core (= 0.70.6)
- React-Core/DevSupport (= 0.70.6)
- React-Core/RCTWebSocket (= 0.70.6)
- React-RCTActionSheet (= 0.70.6)
- React-RCTAnimation (= 0.70.6)
- React-RCTBlob (= 0.70.6)
- React-RCTImage (= 0.70.6)
- React-RCTLinking (= 0.70.6)
- React-RCTNetwork (= 0.70.6)
- React-RCTSettings (= 0.70.6)
- React-RCTText (= 0.70.6)
- React-RCTVibration (= 0.70.6)
- React-bridging (0.70.6):
- RCTRequired (0.70.7)
- RCTTypeSafety (0.70.7):
- FBLazyVector (= 0.70.7)
- RCTRequired (= 0.70.7)
- React-Core (= 0.70.7)
- React (0.70.7):
- React-Core (= 0.70.7)
- React-Core/DevSupport (= 0.70.7)
- React-Core/RCTWebSocket (= 0.70.7)
- React-RCTActionSheet (= 0.70.7)
- React-RCTAnimation (= 0.70.7)
- React-RCTBlob (= 0.70.7)
- React-RCTImage (= 0.70.7)
- React-RCTLinking (= 0.70.7)
- React-RCTNetwork (= 0.70.7)
- React-RCTSettings (= 0.70.7)
- React-RCTText (= 0.70.7)
- React-RCTVibration (= 0.70.7)
- React-bridging (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- React-jsi (= 0.70.6)
- React-callinvoker (0.70.6)
- React-Codegen (0.70.6):
- FBReactNativeSpec (= 0.70.6)
- React-jsi (= 0.70.7)
- React-callinvoker (0.70.7)
- React-Codegen (0.70.7):
- FBReactNativeSpec (= 0.70.7)
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.6)
- RCTTypeSafety (= 0.70.6)
- React-Core (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-Core (0.70.6):
- RCTRequired (= 0.70.7)
- RCTTypeSafety (= 0.70.7)
- React-Core (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-Core (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.6)
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-Core/Default (= 0.70.7)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/CoreModulesHeaders (0.70.6):
- React-Core/CoreModulesHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/Default (0.70.6):
- React-Core/Default (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/DevSupport (0.70.6):
- React-Core/DevSupport (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.6)
- React-Core/RCTWebSocket (= 0.70.6)
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-jsinspector (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-Core/Default (= 0.70.7)
- React-Core/RCTWebSocket (= 0.70.7)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-jsinspector (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTActionSheetHeaders (0.70.6):
- React-Core/RCTActionSheetHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTAnimationHeaders (0.70.6):
- React-Core/RCTAnimationHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTBlobHeaders (0.70.6):
- React-Core/RCTBlobHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTImageHeaders (0.70.6):
- React-Core/RCTImageHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTLinkingHeaders (0.70.6):
- React-Core/RCTLinkingHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTNetworkHeaders (0.70.6):
- React-Core/RCTNetworkHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTSettingsHeaders (0.70.6):
- React-Core/RCTSettingsHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTTextHeaders (0.70.6):
- React-Core/RCTTextHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTVibrationHeaders (0.70.6):
- React-Core/RCTVibrationHeaders (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-Core/RCTWebSocket (0.70.6):
- React-Core/RCTWebSocket (0.70.7):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.6)
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-Core/Default (= 0.70.7)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-perflogger (= 0.70.7)
- Yoga
- React-CoreModules (0.70.6):
- React-CoreModules (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.6)
- React-Codegen (= 0.70.6)
- React-Core/CoreModulesHeaders (= 0.70.6)
- React-jsi (= 0.70.6)
- React-RCTImage (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-cxxreact (0.70.6):
- RCTTypeSafety (= 0.70.7)
- React-Codegen (= 0.70.7)
- React-Core/CoreModulesHeaders (= 0.70.7)
- React-jsi (= 0.70.7)
- React-RCTImage (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-cxxreact (0.70.7):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsinspector (= 0.70.6)
- React-logger (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-runtimeexecutor (= 0.70.6)
- React-hermes (0.70.6):
- React-callinvoker (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsinspector (= 0.70.7)
- React-logger (= 0.70.7)
- React-perflogger (= 0.70.7)
- React-runtimeexecutor (= 0.70.7)
- React-hermes (0.70.7):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- RCT-Folly/Futures (= 2021.07.22.00)
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-jsiexecutor (= 0.70.6)
- React-jsinspector (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-jsi (0.70.6):
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-jsiexecutor (= 0.70.7)
- React-jsinspector (= 0.70.7)
- React-perflogger (= 0.70.7)
- React-jsi (0.70.7):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-jsi/Default (= 0.70.6)
- React-jsi/Default (0.70.6):
- React-jsi/Default (= 0.70.7)
- React-jsi/Default (0.70.7):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-jsiexecutor (0.70.6):
- React-jsiexecutor (0.70.7):
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-jsinspector (0.70.6)
- React-logger (0.70.6):
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-perflogger (= 0.70.7)
- React-jsinspector (0.70.7)
- React-logger (0.70.7):
- glog
- react-native-blur (4.3.0):
- React-Core
@ -318,7 +318,7 @@ PODS:
- React-Core
- react-native-pager-view (6.1.2):
- React-Core
- react-native-paste-input (0.6.0):
- react-native-paste-input (0.6.1):
- React-Core
- Swime (= 3.0.6)
- react-native-quick-base64 (2.0.5):
@ -331,72 +331,72 @@ PODS:
- ReactCommon/turbomodule/core
- react-native-segmented-control (2.2.2):
- React-Core
- React-perflogger (0.70.6)
- React-RCTActionSheet (0.70.6):
- React-Core/RCTActionSheetHeaders (= 0.70.6)
- React-RCTAnimation (0.70.6):
- React-perflogger (0.70.7)
- React-RCTActionSheet (0.70.7):
- React-Core/RCTActionSheetHeaders (= 0.70.7)
- React-RCTAnimation (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.6)
- React-Codegen (= 0.70.6)
- React-Core/RCTAnimationHeaders (= 0.70.6)
- React-jsi (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-RCTBlob (0.70.6):
- RCTTypeSafety (= 0.70.7)
- React-Codegen (= 0.70.7)
- React-Core/RCTAnimationHeaders (= 0.70.7)
- React-jsi (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-RCTBlob (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.6)
- React-Core/RCTBlobHeaders (= 0.70.6)
- React-Core/RCTWebSocket (= 0.70.6)
- React-jsi (= 0.70.6)
- React-RCTNetwork (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-RCTImage (0.70.6):
- React-Codegen (= 0.70.7)
- React-Core/RCTBlobHeaders (= 0.70.7)
- React-Core/RCTWebSocket (= 0.70.7)
- React-jsi (= 0.70.7)
- React-RCTNetwork (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-RCTImage (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.6)
- React-Codegen (= 0.70.6)
- React-Core/RCTImageHeaders (= 0.70.6)
- React-jsi (= 0.70.6)
- React-RCTNetwork (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-RCTLinking (0.70.6):
- React-Codegen (= 0.70.6)
- React-Core/RCTLinkingHeaders (= 0.70.6)
- React-jsi (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-RCTNetwork (0.70.6):
- RCTTypeSafety (= 0.70.7)
- React-Codegen (= 0.70.7)
- React-Core/RCTImageHeaders (= 0.70.7)
- React-jsi (= 0.70.7)
- React-RCTNetwork (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-RCTLinking (0.70.7):
- React-Codegen (= 0.70.7)
- React-Core/RCTLinkingHeaders (= 0.70.7)
- React-jsi (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-RCTNetwork (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.6)
- React-Codegen (= 0.70.6)
- React-Core/RCTNetworkHeaders (= 0.70.6)
- React-jsi (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-RCTSettings (0.70.6):
- RCTTypeSafety (= 0.70.7)
- React-Codegen (= 0.70.7)
- React-Core/RCTNetworkHeaders (= 0.70.7)
- React-jsi (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-RCTSettings (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.6)
- React-Codegen (= 0.70.6)
- React-Core/RCTSettingsHeaders (= 0.70.6)
- React-jsi (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-RCTText (0.70.6):
- React-Core/RCTTextHeaders (= 0.70.6)
- React-RCTVibration (0.70.6):
- RCTTypeSafety (= 0.70.7)
- React-Codegen (= 0.70.7)
- React-Core/RCTSettingsHeaders (= 0.70.7)
- React-jsi (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-RCTText (0.70.7):
- React-Core/RCTTextHeaders (= 0.70.7)
- React-RCTVibration (0.70.7):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.6)
- React-Core/RCTVibrationHeaders (= 0.70.6)
- React-jsi (= 0.70.6)
- ReactCommon/turbomodule/core (= 0.70.6)
- React-runtimeexecutor (0.70.6):
- React-jsi (= 0.70.6)
- ReactCommon/turbomodule/core (0.70.6):
- React-Codegen (= 0.70.7)
- React-Core/RCTVibrationHeaders (= 0.70.7)
- React-jsi (= 0.70.7)
- ReactCommon/turbomodule/core (= 0.70.7)
- React-runtimeexecutor (0.70.7):
- React-jsi (= 0.70.7)
- ReactCommon/turbomodule/core (0.70.7):
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-bridging (= 0.70.6)
- React-callinvoker (= 0.70.6)
- React-Core (= 0.70.6)
- React-cxxreact (= 0.70.6)
- React-jsi (= 0.70.6)
- React-logger (= 0.70.6)
- React-perflogger (= 0.70.6)
- React-bridging (= 0.70.7)
- React-callinvoker (= 0.70.7)
- React-Core (= 0.70.7)
- React-cxxreact (= 0.70.7)
- React-jsi (= 0.70.7)
- React-logger (= 0.70.7)
- React-perflogger (= 0.70.7)
- RNCAsyncStorage (1.17.11):
- React-Core
- RNCClipboard (1.11.1):
@ -437,12 +437,12 @@ PODS:
- RNScreens (3.19.0):
- React-Core
- React-RCTImage
- RNSentry (4.13.0):
- RNSentry (4.14.0):
- React-Core
- Sentry/HybridSDK (= 7.31.5)
- RNShareMenu (6.0.0):
- React
- RNSVG (13.7.0):
- RNSVG (13.8.0):
- React-Core
- SDWebImage (5.15.0):
- SDWebImage/Core (= 5.15.0)
@ -730,30 +730,30 @@ SPEC CHECKSUMS:
EXScreenOrientation: 07e5aeff07bce09a2b214981e612d87fd7719997
EXSecureStore: daec0117c922a67c658cb229152a9e252e5c1750
EXSplashScreen: 3e989924f61a8dd07ee4ea584c6ba14be9b51949
FBLazyVector: 48289402952f4f7a4e235de70a9a590aa0b79ef4
FBReactNativeSpec: dd1186fd05255e3457baa2f4ca65e94c2cd1e3ac
FBLazyVector: a6454570f573a0f6f1d397e5a95c13e8e45d1700
FBReactNativeSpec: 09e8dfba44487e5dc4882a9f5318cde67549549c
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
hermes-engine: 2af7b7a59128f250adfd86f15aa1d5a2ecd39995
hermes-engine: 566e656aa95456a3f3f739fd76ea9a9656f2633f
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
MMKV: 7f34558bbb5a33b0eaefae2de4b6a20a2ffdad6f
MMKVCore: ddf41b9d9262f058419f9ba7598719af56c02cd3
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
RCTRequired: e1866f61af7049eb3d8e08e8b133abd38bc1ca7a
RCTTypeSafety: 27c2ac1b00609a432ced1ae701247593f07f901e
React: bb3e06418d2cc48a84f9666a576c7b38e89cd7db
React-bridging: 572502ec59c9de30309afdc4932e278214288913
React-callinvoker: 6b708b79c69f3359d42f1abb4663f620dbd4dadf
React-Codegen: 74e1cd7cee692a8b983c18df3274b5e749de07c8
React-Core: b587d0a624f9611b0e032505f3d6f25e8daa2bee
React-CoreModules: c6ff48b985e7aa622e82ca51c2c353c7803eb04e
React-cxxreact: ade3d9e63c599afdead3c35f8a8bd12b3da6730b
React-hermes: ed09ae33512bbb8d31b2411778f3af1a2eb681a1
React-jsi: 5a3952e0c6d57460ad9ee2c905025b4c28f71087
React-jsiexecutor: b4a65947391c658450151275aa406f2b8263178f
React-jsinspector: 60769e5a0a6d4b32294a2456077f59d0266f9a8b
React-logger: 1623c216abaa88974afce404dc8f479406bbc3a0
RCTRequired: 837880d26ec119e105317dc28a456f3016bf16d1
RCTTypeSafety: 5c854c04c3383cab04f404e25d408ed52124b300
React: ec6efc54c0fbb7c2e7147624c78065be80753082
React-bridging: 7dd96a58f896a1a7422a491d17ec644e87277953
React-callinvoker: f348d204f7bbe6020d4fd0dd57303f5b48a28003
React-Codegen: 73350192a09163a640c23baf795464474be0d793
React-Core: c57b11fd672421049038ef36881372da2605a0cd
React-CoreModules: 2d91acffc3924adac6b508e3fc44121aa719ec40
React-cxxreact: ee2ab13a1db086dc152421aa42dc94cc68f412a1
React-hermes: be9d64f5019238ce22ae4e7d242c4f2e96d60595
React-jsi: 04031a830f9714e95d517153817ba7bfc15bfdf8
React-jsiexecutor: e95cdd036e7947ddf87f3049319ac3064deb76b5
React-jsinspector: 1c34fea1868136ecde647bc11fae9266d4143693
React-logger: e9f407f9fdf3f3ce7749ae6f88affe63e8446019
react-native-blur: 50c9feabacbc5f49b61337ebc32192c6be7ec3c3
react-native-blurhash: add4df9a937b4e021a24bc67a0714f13e0bd40b7
react-native-cameraroll: 5b25d0be40185d02e522bf2abf8a1ba4e8faa107
@ -764,36 +764,36 @@ SPEC CHECKSUMS:
react-native-mmkv: 69b9c003f10afdd01addf7c6ee784ce42ee2eff3
react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983
react-native-pager-view: 54bed894cecebe28cede54c01038d9d1e122de43
react-native-paste-input: 5182843692fd2ec72be50f241a38a49796e225d7
react-native-paste-input: fb7156dc75960c9895ddd9b9d68eeb874c9f323a
react-native-quick-base64: e657e9197e61b60a9dec49807843052b830da254
react-native-safe-area-context: 39c2d8be3328df5d437ac1700f4f3a4f75716acc
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
React-perflogger: 8c79399b0500a30ee8152d0f9f11beae7fc36595
React-RCTActionSheet: 7316773acabb374642b926c19aef1c115df5c466
React-RCTAnimation: 5341e288375451297057391227f691d9b2326c3d
React-RCTBlob: b0615fc2daf2b5684ade8fadcab659f16f6f0efa
React-RCTImage: 6487b9600f268ecedcaa86114d97954d31ad4750
React-RCTLinking: c8018ae9ebfefcec3839d690d4725f8d15e4e4b3
React-RCTNetwork: 8aa63578741e0fe1205c28d7d4b40dbfdabce8a8
React-RCTSettings: d00c15ad369cd62242a4dfcc6f277912b4a84ed3
React-RCTText: f532e5ca52681ecaecea452b3ad7a5b630f50d75
React-RCTVibration: c75ceef7aa60a33b2d5731ebe5800ddde40cefc4
React-runtimeexecutor: 15437b576139df27635400de0599d9844f1ab817
ReactCommon: 349be31adeecffc7986a0de875d7fb0dcf4e251c
React-perflogger: 52a94f38c19a518d05726624b49bfc192639374d
React-RCTActionSheet: 7b89fe64a852bc3ae39b91dbd142ef09931ef3f7
React-RCTAnimation: ad84bfbf8c5f6f77e65092d0c2b0506b80b5cf99
React-RCTBlob: e4ee3ab649459329f5aa59d903762bfbd6164220
React-RCTImage: aeb508f6ac80a94904a646dde61b0f67ea757ea7
React-RCTLinking: 1171b3fdc265c479b7039069ce7e8fef68ca70aa
React-RCTNetwork: 5d87cc4afd1fcef86fb2f804f26366f0314769fe
React-RCTSettings: 644545854880b7d03c49f620664a307fd4613a1d
React-RCTText: f8e4a283be2290a76b89f4a83ba2277faf90930d
React-RCTVibration: eb7837d55b87c7a4ead3ab7632ad70dca87c65dc
React-runtimeexecutor: 7cec9ed92ebde8309902530bb566819645c84ee5
ReactCommon: 0253d197eaa7f6689dcd3e7d5360449ab93e10df
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
RNCClipboard: 2834e1c4af68697089cdd455ee4a4cdd198fa7dd
RNFastImage: bd611b5635f1e0f43c8ccf597b1ef6ee0d0f966d
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
RNReanimated: 6668b0587bebd4b15dd849b99e5a9c70fc12ed95
RNScreens: ea4cd3a853063cda19a4e3c28d2e52180c80f4eb
RNSentry: acebe4104a6f5915ae871eb59dc73f13dcc92ef7
RNSentry: 7e90aec2633d2fdad8aeb839c9915e4376fd27d1
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
RNSVG: d787d64ca06b9158e763ad2638a8c4edce00782a
RNSVG: c1e76b81c76cdcd34b4e1188852892dc280eb902
SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
Sentry: 4c9babff9034785067c896fd580b1f7de44da020
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
Yoga: 99caf8d5ab45e9d637ee6e0174ec16fbbb01bcfc
Yoga: 92d086bb705a41cc588599b51db726ba7b1d341c
PODFILE CHECKSUM: 08742f25aa1cdb93d6d5d5efeafd8803ba02b689

View File

@ -1,6 +1,6 @@
{
"name": "tooot",
"version": "4.8.6",
"version": "4.8.7",
"description": "tooot for Mastodon",
"author": "xmflsct <me@xmflsct.com>",
"license": "GPL-3.0-or-later",
@ -24,7 +24,7 @@
"@formatjs/intl-numberformat": "^8.3.3",
"@formatjs/intl-pluralrules": "^5.1.8",
"@formatjs/intl-relativetimeformat": "^11.1.8",
"@mattermost/react-native-paste-input": "^0.6.0",
"@mattermost/react-native-paste-input": "^0.6.1",
"@neverdull-agency/expo-unlimited-secure-store": "^1.0.10",
"@react-native-async-storage/async-storage": "~1.17.11",
"@react-native-camera-roll/camera-roll": "^5.2.3",
@ -32,15 +32,15 @@
"@react-native-community/blur": "^4.3.0",
"@react-native-community/netinfo": "9.3.7",
"@react-native-community/segmented-control": "^2.2.2",
"@react-native-firebase/app": "^16.5.2",
"@react-native-firebase/app": "^16.7.0",
"@react-native-menu/menu": "^0.7.3",
"@react-navigation/bottom-tabs": "^6.5.3",
"@react-navigation/native": "^6.1.2",
"@react-navigation/native-stack": "^6.9.8",
"@react-navigation/stack": "^6.3.11",
"@sentry/react-native": "4.13.0",
"@react-navigation/bottom-tabs": "^6.5.4",
"@react-navigation/native": "^6.1.3",
"@react-navigation/native-stack": "^6.9.9",
"@react-navigation/stack": "^6.3.12",
"@sentry/react-native": "4.14.0",
"@sharcoux/slider": "^6.1.1",
"@tanstack/react-query": "^4.23.0",
"@tanstack/react-query": "^4.24.4",
"axios": "^1.2.4",
"diff": "^5.1.0",
"expo": "^47.0.13",
@ -68,8 +68,8 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-i18next": "^12.1.4",
"react-intl": "^6.2.5",
"react-native": "^0.70.6",
"react-intl": "^6.2.7",
"react-native": "^0.70.7",
"react-native-blurhash": "^1.1.10",
"react-native-fast-image": "^8.6.3",
"react-native-flash-message": "^0.4.0",
@ -85,7 +85,7 @@
"react-native-safe-area-context": "^4.5.0",
"react-native-screens": "^3.19.0",
"react-native-share-menu": "^6.0.0",
"react-native-svg": "^13.7.0",
"react-native-svg": "^13.8.0",
"react-native-swipe-list-view": "^3.2.9",
"react-native-tab-view": "^3.3.4",
"react-redux": "^8.0.5",
@ -103,7 +103,7 @@
"@types/lodash": "^4.14.191",
"@types/react": "^18.0.27",
"@types/react-dom": "^18.0.10",
"@types/react-native": "^0.70.9",
"@types/react-native": "^0.70.10",
"@types/react-native-share-menu": "^5.0.2",
"@types/url-parse": "^1.4.8",
"babel-plugin-module-resolver": "^5.0.0",
@ -112,7 +112,7 @@
"deprecated-react-native-prop-types": "^4.0.0",
"dotenv": "^16.0.3",
"react-native-clean-project": "^4.0.1",
"typescript": "^4.9.4"
"typescript": "^4.9.5"
},
"packageManager": "yarn@3.3.1",
"resolutions": {

View File

@ -2,7 +2,7 @@ import { emojis } from '@components/Emojis'
import Icon from '@components/Icon'
import CustomText from '@components/Text'
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
import { connectImage } from '@utils/api/helpers/connect'
import { connectMedia } from '@utils/api/helpers/connect'
import { StorageAccount } from '@utils/storage/account'
import { getAccountStorage, setAccountStorage } from '@utils/storage/actions'
import { StyleConstants } from '@utils/styles/constants'
@ -130,11 +130,13 @@ const EmojisList = () => {
style={{ padding: StyleConstants.Spacing.S }}
>
<FastImage
enterTransition='fadeIn'
transitionDuration={60}
accessibilityLabel={t('common:customEmoji.accessibilityLabel', {
emoji: emoji.shortcode
})}
accessibilityHint={t('screenCompose:content.root.footer.emojis.accessibilityHint')}
source={connectImage({ uri })}
source={connectMedia({ uri })}
style={{ width: 32, height: 32 }}
/>
</Pressable>

View File

@ -1,5 +1,5 @@
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
import { connectImage } from '@utils/api/helpers/connect'
import { connectMedia } from '@utils/api/helpers/connect'
import { useTheme } from '@utils/styles/ThemeManager'
import React, { useEffect, useState } from 'react'
import {
@ -88,17 +88,21 @@ const GracefullyImage = ({
{...(onPress ? { accessibilityRole: 'imagebutton' } : { accessibilityRole: 'image' })}
accessibilityLabel={accessibilityLabel}
accessibilityHint={accessibilityHint}
style={[style, dimension, { backgroundColor: colors.shimmerDefault }]}
style={[style, dimension]}
{...(onPress ? (hidden ? { disabled: true } : { onPress }) : { disabled: true })}
>
{uri.preview && !imageLoaded ? (
<FastImage
source={connectImage({ uri: uri.preview })}
style={[styles.placeholder, { backgroundColor: colors.shimmerDefault }]}
source={connectMedia({ uri: uri.preview })}
enterTransition='fadeIn'
transitionDuration={60}
style={[styles.placeholder]}
/>
) : null}
<FastImage
source={connectImage(source)}
source={connectMedia(source)}
enterTransition={!blurhash && !uri.preview ? 'fadeIn' : 'none'}
transitionDuration={60}
style={[{ flex: 1 }, imageStyle]}
onLoad={() => {
setImageLoaded(true)

View File

@ -186,7 +186,7 @@ const ComponentInstance: React.FC<Props> = ({
if (!account) {
setGlobalStorage('accounts', (accounts || []).concat([accountKey]))
}
setAccount(accountKey)
await setAccount(accountKey)
goBack && navigation.goBack()
}

View File

@ -1,6 +1,6 @@
import CustomText from '@components/Text'
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
import { connectImage } from '@utils/api/helpers/connect'
import { connectMedia } from '@utils/api/helpers/connect'
import { useGlobalStorage } from '@utils/storage/actions'
import { StyleConstants } from '@utils/styles/constants'
import { adaptiveScale } from '@utils/styles/scaling'
@ -78,7 +78,7 @@ const ParseEmojis: React.FC<Props> = ({
<CustomText key={emojiShortcode + i}>
{i === 0 ? ' ' : undefined}
<FastImage
source={connectImage({ uri: uri.trim() })}
source={connectMedia({ uri: uri.trim() })}
style={{
width: adaptedFontsize,
height: adaptedFontsize,

View File

@ -297,7 +297,7 @@ const ParseHTML: React.FC<Props> = ({
<Text
children={document.children.map(renderNode)}
onTextLayout={({ nativeEvent }) => {
if (numberOfLines === 1 || nativeEvent.lines.length >= numberOfLines + 5) {
if (numberOfLines === 1 || nativeEvent.lines.length >= numberOfLines + 8) {
setTotalLines(nativeEvent.lines.length)
}
}}

View File

@ -61,7 +61,7 @@ const TimelineRefresh: React.FC<Props> = ({
const prevStatusId = useRef<Mastodon.Status['id']>()
const queryClient = useQueryClient()
const { refetch } = useTimelineQuery({ ...queryKey[1] })
const { refetch, isFetched } = useTimelineQuery({ ...queryKey[1] })
const { t } = useTranslation('componentTimeline')
const { colors } = useTheme()
@ -118,10 +118,11 @@ const TimelineRefresh: React.FC<Props> = ({
}
},
data => {
if (data) {
if (data && isFetched) {
runOnJS(haptics)('Light')
}
}
},
[isFetched]
)
const fetchAndScrolled = useSharedValue(false)
@ -246,6 +247,8 @@ const TimelineRefresh: React.FC<Props> = ({
[]
)
if (!isFetched) return null
return (
<Animated.View
style={{

View File

@ -3,6 +3,7 @@ import { ParseEmojis } from '@components/Parse'
import { useNavigation } from '@react-navigation/native'
import { StackNavigationProp } from '@react-navigation/stack'
import { TabLocalStackParamList } from '@utils/navigation/navigators'
import { getAccountStorage } from '@utils/storage/actions'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React, { useContext } from 'react'
@ -37,8 +38,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
/>
)
const onPress = () =>
navigation.push('Tab-Shared-Account', { account })
const onPress = () => navigation.push('Tab-Shared-Account', { account })
const children = () => {
switch (action) {
@ -109,6 +109,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
</>
)
case 'reblog':
const myself = rest.rootStatus?.account.id === getAccountStorage.string('auth.account.id')
return (
<>
<Icon
@ -121,6 +122,8 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
{content(
isNotification
? t('shared.actioned.reblog.notification', { name })
: myself
? t('shared.actioned.reblog.myself')
: t('shared.actioned.reblog.default', { name })
)}
</Pressable>

View File

@ -1,6 +1,7 @@
import Button from '@components/Button'
import GracefullyImage from '@components/GracefullyImage'
import { Slider } from '@sharcoux/slider'
import { connectMedia } from '@utils/api/helpers/connect'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import { Audio } from 'expo-av'
@ -26,7 +27,7 @@ const AttachmentAudio: React.FC<Props> = ({ total, index, sensitiveShown, audio
const playAudio = useCallback(async () => {
if (!audioPlayer) {
const { sound } = await Audio.Sound.createAsync(
{ uri: audio.url },
connectMedia({ uri: audio.url }) as { uri: string },
{},
// @ts-ignore
props => setAudioPosition(props.positionMillis)

View File

@ -1,5 +1,6 @@
import Button from '@components/Button'
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
import { connectMedia } from '@utils/api/helpers/connect'
import { useAccountStorage, useGlobalStorage } from '@utils/storage/actions'
import { StyleConstants } from '@utils/styles/constants'
import { ResizeMode, Video, VideoFullscreenUpdate } from 'expo-av'
@ -41,7 +42,7 @@ const AttachmentVideo: React.FC<Props> = ({
const playOnPress = async () => {
setVideoLoading(true)
if (!videoLoaded) {
await videoPlayer.current?.loadAsync({ uri: video.url })
await videoPlayer.current?.loadAsync(connectMedia({ uri: video.url }) as { uri: string })
}
setVideoLoading(false)
@ -71,10 +72,10 @@ const AttachmentVideo: React.FC<Props> = ({
shouldPlay: reduceMotionEnabled || !shouldAutoplayGifv ? false : true,
isMuted: true,
isLooping: true,
source: { uri: video.url }
source: connectMedia({ uri: video.url }) as { uri: string }
}
: {
posterSource: { uri: video.preview_url },
posterSource: connectMedia({ uri: video.preview_url }),
posterStyle: { resizeMode: ResizeMode.COVER }
})}
useNativeControls={false}

View File

@ -50,21 +50,22 @@ const TimelinePoll: React.FC = () => {
},
onError: (err: any, params) => {
const theParams = params as MutationVarsTimelineUpdateStatusProperty
displayMessage({
theme,
type: 'error',
message: t('common:message.error.message', {
// @ts-ignore
function: t(`componentTimeline:shared.poll.meta.button.${theParams.payload.type}` as any)
}),
...(err.status &&
typeof err.status === 'number' &&
err.data &&
err.data.error &&
typeof err.data.error === 'string' && {
description: err.data.error
})
})
if (theParams.payload.type === 'poll') {
displayMessage({
theme,
type: 'error',
message: t('common:message.error.message', {
function: t(`componentTimeline:shared.poll.meta.button.${theParams.payload.action}`)
}),
...(err.status &&
typeof err.status === 'number' &&
err.data &&
err.data.error &&
typeof err.data.error === 'string' && {
description: err.data.error
})
})
}
queryClient.invalidateQueries(queryKey)
}
})

View File

@ -1,7 +1,7 @@
import ComponentSeparator from '@components/Separator'
import CustomText from '@components/Text'
import TimelineDefault from '@components/Timeline/Default'
import { useScrollToTop } from '@react-navigation/native'
import { useNavigation, useScrollToTop } from '@react-navigation/native'
import { UseInfiniteQueryOptions } from '@tanstack/react-query'
import { QueryKeyTimeline, useTimelineQuery } from '@utils/queryHooks/timeline'
import { flattenPages } from '@utils/queryHooks/utils'
@ -12,7 +12,8 @@ import {
} from '@utils/storage/actions'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React, { RefObject, useRef, useState } from 'react'
import { throttle } from 'lodash'
import React, { RefObject, useCallback, useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { FlatList, FlatListProps, Platform, RefreshControl } from 'react-native'
import Animated, {
@ -55,6 +56,7 @@ const Timeline: React.FC<Props> = ({
readMarker = undefined,
customProps
}) => {
const navigation = useNavigation()
const { colors, theme } = useTheme()
const { t } = useTranslation('componentTimeline')
@ -134,6 +136,21 @@ const Timeline: React.FC<Props> = ({
[isFetching]
)
const latestMarker = useRef<string>()
const updateMarkers = useCallback(
throttle(
() => readMarker && setAccountStorage([{ key: readMarker, value: latestMarker.current }]),
1000 * 15
),
[]
)
readMarker &&
useEffect(() => {
const unsubscribe = navigation.addListener('blur', () =>
setAccountStorage([{ key: readMarker, value: latestMarker.current }])
)
return unsubscribe
}, [])
const viewabilityConfigCallbackPairs = useRef<
Pick<FlatListProps<any>, 'viewabilityConfigCallbackPairs'>['viewabilityConfigCallbackPairs']
>(
@ -155,9 +172,11 @@ const Timeline: React.FC<Props> = ({
firstItemId &&
firstItemId > (marker || '0')
) {
setAccountStorage([{ key: readMarker, value: firstItemId }])
latestMarker.current = firstItemId
updateMarkers()
} else {
// setAccountStorage([{ key: readMarker, value: '109519141378761752' }])
// latestMarker.current = '105250709762254246'
// updateMarkers()
}
}
}
@ -218,21 +237,18 @@ const Timeline: React.FC<Props> = ({
<TimelineFooter queryKey={queryKey} disableInfinity={disableInfinity} />
}
ListEmptyComponent={<TimelineEmpty queryKey={queryKey} />}
ItemSeparatorComponent={({ leadingItem }) =>
queryKey[1].page === 'Toot' && queryKey[1].toot === leadingItem.id ? (
<ComponentSeparator extraMarginLeft={0} />
) : (
<ComponentSeparator
extraMarginLeft={StyleConstants.Avatar.M + StyleConstants.Spacing.S}
/>
)
}
ItemSeparatorComponent={() => (
<ComponentSeparator
extraMarginLeft={StyleConstants.Avatar.M + StyleConstants.Spacing.S}
/>
)}
viewabilityConfigCallbackPairs={viewabilityConfigCallbackPairs.current}
{...(!isLoading && {
maintainVisibleContentPosition: {
minIndexForVisible: 0
}
})}
{...(!isLoading &&
!isFetching && {
maintainVisibleContentPosition: {
minIndexForVisible: 0
}
})}
{...androidRefreshControl}
{...customProps}
/>

View File

@ -33,6 +33,7 @@
"poll": "S'ha acabat una enquesta en què havies participat",
"reblog": {
"default": "{{name}} ha impulsat",
"myself": "",
"notification": "{{name}} ha impulsat la teva publicació"
},
"update": "L'impuls ha sigut editat",

View File

@ -33,6 +33,7 @@
"poll": "",
"reblog": {
"default": "",
"myself": "",
"notification": ""
},
"update": "",

View File

@ -6,22 +6,22 @@
"action_false": "Folgen",
"action_true": "Nutzer entfolgen"
},
"inLists": "",
"inLists": "Listen mit diesem Nutzer…",
"showBoosts": {
"action_false": "",
"action_true": ""
"action_false": "Zeige Boosts des Kontos",
"action_true": "Boosts des Users ausblenden"
},
"mute": {
"action_false": "Profil stummschalten",
"action_true": "Stummschaltung des Nutzers aufheben"
},
"followAs": {
"trigger": "",
"trigger": "Folgen als…",
"succeed_default": "Folgt nun @{{target}} als @{{source}}",
"succeed_locked": "Follower-Anfrage an @{{target}} mit {{source}} gesendet, Bestätigung ausstehend",
"failed": "Folgen als…"
},
"blockReport": "",
"blockReport": "Blockieren und melden",
"block": {
"action_false": "Nutzer blockieren",
"action_true": "User entblocken",
@ -56,11 +56,11 @@
},
"hashtag": {
"follow": {
"action_false": "",
"action_true": ""
"action_false": "Folgen",
"action_true": "Entfolgen"
},
"filter": {
"action": ""
"action": "Hashtag filtern…"
}
},
"share": {
@ -99,8 +99,8 @@
"action_true": "Tröt nicht mehr anheften"
},
"filter": {
"action_false": "",
"action_true": ""
"action_false": "Tröts filtern…",
"action_true": "Filter bearbeiten…"
}
}
}

View File

@ -3,7 +3,7 @@
"textInput": {
"placeholder": "Domain der Instanz"
},
"whitelisted": "",
"whitelisted": "Von dieser Instanz können Tröts möglicherweise nicht ohne Login abgerufen werden.",
"button": "Login",
"information": {
"name": "Name",

View File

@ -17,10 +17,10 @@
"refresh": {
"fetchPreviousPage": "Neuere Einträge",
"refetch": "Zum letzten",
"fetching": "",
"fetching": "Neue Tröts werden abgerufen…",
"fetched": {
"none": "",
"found": ""
"none": "Kein neuerer Tröt",
"found": "{{count}} Tröts abgerufen"
}
},
"shared": {
@ -33,6 +33,7 @@
"poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
"reblog": {
"default": "{{name}} hat geboostet",
"myself": "",
"notification": "{{name}} hat deinen Tröt geboostet"
},
"update": "Boost wurde bearbeitet",
@ -128,7 +129,7 @@
"muted": {
"accessibilityLabel": "Tröt stummgeschaltet"
},
"replies": "",
"replies": "Antworten <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "Tröt ist eine Direktnachricht"

View File

@ -171,8 +171,8 @@
},
"preferencesFilters": {
"expired": "Abgelaufen",
"keywords_one": "",
"keywords_other": "",
"keywords_one": "{{count}} Stichwort",
"keywords_other": "{{count}} Stichwort",
"statuses_one": "{{count}} Tröt",
"statuses_other": "{{count}} Tröts",
"context": "Läuft in <0 /> ab",
@ -196,7 +196,7 @@
"604800": "Nach einer Woche",
"18144000": "Nach einem Monat"
},
"context": "",
"context": "Gilt für",
"contexts": {
"home": "Gefolgte und Listen",
"notifications": "Benachrichtigung",
@ -209,9 +209,9 @@
"warn": "Verdeckt, kann aber aufgedeckt werden",
"hide": "Vollständig verdeckt"
},
"keywords": "",
"keywords": "Treffer für diese Schlüsselwörter",
"keyword": "Stichwörter",
"statuses": ""
"statuses": "Passende Tröts"
},
"profile": {
"feedback": {
@ -400,29 +400,29 @@
"name": "<0 /><1>'s Medien</1>"
},
"filter": {
"name": "",
"existed": ""
"name": "Zum Filter hinzufügen",
"existed": "In diesen Filtern vorhanden"
},
"history": {
"name": "Bearbeitungsverlauf"
},
"report": {
"name": "",
"report": "",
"name": "{{acct}} melden",
"report": "Melden",
"forward": {
"heading": ""
"heading": "Anonym an die Instanz {{instance}} weiterleiten"
},
"reasons": {
"heading": "",
"spam": "",
"other": "",
"violation": ""
"heading": "Was stimmt mit diesem Konto nicht?",
"spam": "Das ist Spam",
"other": "Etwas anderes",
"violation": "Verstoß gegen die Instanzregeln"
},
"comment": {
"heading": ""
"heading": "Möchtest du sonst noch etwas hinzufügen?"
},
"violatedRules": {
"heading": ""
"heading": "Verstoß gegen die Instanzregeln"
}
},
"search": {

View File

@ -33,6 +33,7 @@
"poll": "Μια δημοσκόπηση στην οποία ψηφίσατε ολοκληρώθηκε",
"reblog": {
"default": "{{name}} προώθησε τη δημοσίευση",
"myself": "",
"notification": "{{name}} προώθησε τη δημοσίευσή σας"
},
"update": "Η προώθηση έχει υποστεί επεξεργασία",

View File

@ -33,6 +33,7 @@
"poll": "A poll you have voted in has ended",
"reblog": {
"default": "{{name}} boosted",
"myself": "I boosted",
"notification": "{{name}} boosted your toot"
},
"update": "Reblog has been edited",

View File

@ -33,6 +33,7 @@
"poll": "Una encuesta en la que has votado ha terminado",
"reblog": {
"default": "{{name}} ha impulsado",
"myself": "",
"notification": "{{name}} ha impulsado tu toot"
},
"update": "El impulso ha sido editado",

View File

@ -17,10 +17,10 @@
"refresh": {
"fetchPreviousPage": "Berrienak hemendik hasita",
"refetch": "Azkenekora arte",
"fetching": "",
"fetching": "Tut berriak eskuratzen...",
"fetched": {
"none": "",
"found": ""
"none": "Tut berririk ez",
"found": "{{count}} tut eskuratuak"
}
},
"shared": {
@ -33,6 +33,7 @@
"poll": "Erantzun zenuen inkesta bat amaitu da",
"reblog": {
"default": "{{name}}-(e)k bultzatu du",
"myself": "",
"notification": "{{name}}-(e)k zure tuta bultzatu du"
},
"update": "Bultzada editatua izan da",

View File

@ -33,6 +33,7 @@
"poll": "Un sondage auquel vous avez participé est maintenant terminé",
"reblog": {
"default": "{{name}} a partagé",
"myself": "",
"notification": "{{name}} a partagé votre message"
},
"update": "Le reblog a été modifié",

View File

@ -33,6 +33,7 @@
"poll": "Un sondaggio in cui hai votato è terminato",
"reblog": {
"default": "{{name}} ha ricondiviso",
"myself": "",
"notification": "{{name}} ha ricondiviso il tuo toot"
},
"update": "Il link è stato modificato",

View File

@ -6,7 +6,7 @@
"action_false": "ユーザーをフォロー",
"action_true": "ユーザーをフォロー解除"
},
"inLists": "",
"inLists": "ユーザーを含むリスト一覧",
"showBoosts": {
"action_false": "ブーストを表示する",
"action_true": "ブーストを非表示にする"
@ -16,12 +16,12 @@
"action_true": "ユーザーのミュートを解除"
},
"followAs": {
"trigger": "",
"trigger": "... としてフォロー",
"succeed_default": "{{source}} として @{{target}} をフォローしました",
"succeed_locked": "{{source}} として @{{target}} へのフォロー申請を送りました。現在承認待ちです",
"failed": "別ユーザーとしてフォロー"
},
"blockReport": "",
"blockReport": "ブロックと通報",
"block": {
"action_false": "ユーザーをブロック",
"action_true": "ユーザーのブロックを解除",
@ -56,11 +56,11 @@
},
"hashtag": {
"follow": {
"action_false": "",
"action_true": ""
"action_false": "フォロー",
"action_true": "フォロー解除"
},
"filter": {
"action": ""
"action": "ハッシュタグをフィルター"
}
},
"share": {
@ -99,8 +99,8 @@
"action_true": "トゥートの固定を解除"
},
"filter": {
"action_false": "",
"action_true": ""
"action_false": "トゥートのフィルター",
"action_true": "フィルターの管理"
}
}
}

View File

@ -17,7 +17,7 @@
"refresh": {
"fetchPreviousPage": "前のページを取得",
"refetch": "更新",
"fetching": "",
"fetching": "新しいトゥートを取得しています...",
"fetched": {
"none": "",
"found": ""
@ -33,6 +33,7 @@
"poll": "アンケートが終了しました",
"reblog": {
"default": "{{name}}さんがブースト",
"myself": "",
"notification": "{{name}}さんがあなたのトゥートをブーストしました"
},
"update": "ブーストしたトゥートが編集されました",

View File

@ -70,13 +70,13 @@
"name": "プッシュ通知"
},
"preferences": {
"name": ""
"name": "設定"
},
"preferencesFilters": {
"name": ""
},
"preferencesFilterAdd": {
"name": ""
"name": "フィルターを作成"
},
"preferencesFilterEdit": {
"name": ""
@ -138,9 +138,9 @@
"visibility": {
"title": "",
"options": {
"public": "",
"unlisted": "",
"private": ""
"public": "公開",
"unlisted": "未収載",
"private": "フォロワー限定"
}
},
"sensitive": {
@ -170,7 +170,7 @@
}
},
"preferencesFilters": {
"expired": "",
"expired": "期限切れ",
"keywords_one": "",
"keywords_other": "",
"statuses_one": "",
@ -178,29 +178,29 @@
"context": "",
"contexts": {
"home": "",
"notifications": "",
"public": "",
"thread": "",
"account": ""
"notifications": "通知",
"public": "連合",
"thread": "会話",
"account": "プロフィール"
}
},
"preferencesFilter": {
"name": "",
"expiration": "",
"name": "名前",
"expiration": "有効期限",
"expirationOptions": {
"0": "",
"1800": "",
"3600": "",
"43200": "",
"86400": "",
"604800": "",
"18144000": ""
"0": "無期限",
"1800": "30分後",
"3600": "1時間後",
"43200": "12時間後",
"86400": "1日後",
"604800": "1週間後",
"18144000": "1ヶ月後"
},
"context": "",
"contexts": {
"home": "",
"notifications": "",
"public": "",
"notifications": "通知",
"public": "連合タイムライン",
"thread": "",
"account": ""
},
@ -210,7 +210,7 @@
"hide": ""
},
"keywords": "",
"keyword": "",
"keyword": "キーワード",
"statuses": ""
},
"profile": {
@ -400,7 +400,7 @@
"name": "<0 /><1>のメディア</1>"
},
"filter": {
"name": "",
"name": "フィルターに追加",
"existed": ""
},
"history": {

View File

@ -33,6 +33,7 @@
"poll": "내가 참여한 투표가 끝났어요",
"reblog": {
"default": "{{name}} 님이 부스트했어요",
"myself": "",
"notification": "{{name}} 님이 내 툿을 부스트했어요"
},
"update": "부스트한 툿이 수정됨",

View File

@ -33,6 +33,7 @@
"poll": "Een poll waaraan jij hebt meegedaan is beëindigd",
"reblog": {
"default": "{{name}} boostte",
"myself": "Ik boostte",
"notification": "{{name}} boostte jouw toot"
},
"update": "De reblog is bewerkt",

View File

@ -33,6 +33,7 @@
"poll": "Ankieta w której brałeś(-aś) udział zakończyło się",
"reblog": {
"default": "{{name}} podbił(a)",
"myself": "",
"notification": "{{name}} podbił(a) Twojego tootka"
},
"update": "Podbity tootek został edytowany",

View File

@ -33,6 +33,7 @@
"poll": "Uma enquete em que você votou terminou",
"reblog": {
"default": "{{name}} boostou",
"myself": "",
"notification": "{{name}} deu boost no teu toot"
},
"update": "Toot foi editado",
@ -60,7 +61,7 @@
"accessibilityLabel": "Adicionar este toot aos favoritos",
"function": "Salvos"
},
"openReport": ""
"openReport": "Abrir denúncia"
},
"actionsUsers": {
"reblogged_by": {

View File

@ -73,7 +73,7 @@
"name": "Preferências"
},
"preferencesFilters": {
"name": ""
"name": "Todos os filtros de conteúdo"
},
"preferencesFilterAdd": {
"name": "Criar um Filtro"
@ -150,8 +150,8 @@
"title": "",
"options": {
"default": "Ocultar mídia marcada como sensível",
"show_all": "",
"hide_all": ""
"show_all": "Sempre mostrar mídias",
"hide_all": "Sempre ocultar mídias"
}
},
"spoilers": {
@ -300,10 +300,10 @@
"heading": "Toot foi editado"
},
"admin.sign_up": {
"heading": ""
"heading": "Admin: cadastros"
},
"admin.report": {
"heading": ""
"heading": "Admin: denúncias"
},
"howitworks": "Saiba como funciona o roteamento"
},

View File

@ -33,6 +33,7 @@
"poll": "",
"reblog": {
"default": "",
"myself": "",
"notification": ""
},
"update": "",

View File

@ -33,6 +33,7 @@
"poll": "En omröstning du röstat i har avslutats",
"reblog": {
"default": "{{name}} boostade",
"myself": "Jag boostade",
"notification": "{{name}} boostade ditt inlägg"
},
"update": "Boosten har redigerats",

View File

@ -33,6 +33,7 @@
"poll": "Опитування, у якому ви голосували, закінчилося",
"reblog": {
"default": "{{name}} передмухує",
"myself": "",
"notification": "{{name}} передмухує ваш дмух"
},
"update": "Передмух був відредагований",

View File

@ -33,6 +33,7 @@
"poll": "Cuộc bình chọn đã kết thúc",
"reblog": {
"default": "{{name}} đăng lại",
"myself": "",
"notification": "{{name}} đăng lại tút của bạn"
},
"update": "Đăng lại đã được sửa",

View File

@ -33,6 +33,7 @@
"poll": "你参与的投票已结束",
"reblog": {
"default": "{{name}} 转嘟了",
"myself": "我转嘟了",
"notification": "{{name}} 转嘟了你的嘟文"
},
"update": "转嘟已被编辑",

View File

@ -33,6 +33,7 @@
"poll": "您曾投過的投票已經結束",
"reblog": {
"default": "{{name}} 轉嘟了",
"myself": "我轉嘟了",
"notification": "{{name}} 轉嘟了您的嘟文"
},
"update": "轉嘟已編輯",

View File

@ -6,7 +6,7 @@ import RelativeTime from '@components/RelativeTime'
import CustomText from '@components/Text'
import { BlurView } from '@react-native-community/blur'
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
import { connectImage } from '@utils/api/helpers/connect'
import { connectMedia } from '@utils/api/helpers/connect'
import { RootStackScreenProps } from '@utils/navigation/navigators'
import { useAnnouncementMutation, useAnnouncementQuery } from '@utils/queryHooks/announcement'
import { StyleConstants } from '@utils/styles/constants'
@ -140,7 +140,7 @@ const ScreenAnnouncements: React.FC<RootStackScreenProps<'Screen-Announcements'>
>
{reaction.url ? (
<FastImage
source={connectImage({
source={connectMedia({
uri: reduceMotionEnabled ? reaction.static_url : reaction.url
})}
style={{

View File

@ -3,7 +3,7 @@ import Icon from '@components/Icon'
import { SwipeToActions } from '@components/SwipeToActions'
import CustomText from '@components/Text'
import HeaderSharedCreated from '@components/Timeline/Shared/HeaderShared/Created'
import { connectImage } from '@utils/api/helpers/connect'
import { connectMedia } from '@utils/api/helpers/connect'
import apiInstance from '@utils/api/instance'
import { ScreenComposeStackScreenProps } from '@utils/navigation/navigators'
import { getAccountStorage, setAccountStorage, useAccountStorage } from '@utils/storage/actions'
@ -158,7 +158,7 @@ const ComposeDraftsList: React.FC<ScreenComposeStackScreenProps<'Screen-Compose-
source={
attachment.local?.thumbnail
? { uri: attachment.local?.thumbnail }
: connectImage({ uri: attachment.remote?.preview_url })
: connectMedia({ uri: attachment.remote?.preview_url })
}
/>
))}

View File

@ -6,7 +6,7 @@ import { MAX_MEDIA_ATTACHMENTS } from '@components/mediaSelector'
import CustomText from '@components/Text'
import { useActionSheet } from '@expo/react-native-action-sheet'
import { useNavigation } from '@react-navigation/native'
import { connectImage } from '@utils/api/helpers/connect'
import { connectMedia } from '@utils/api/helpers/connect'
import { featureCheck } from '@utils/helpers/featureCheck'
import { StyleConstants } from '@utils/styles/constants'
import layoutAnimation from '@utils/styles/layoutAnimation'
@ -105,11 +105,13 @@ const ComposeAttachments: React.FC<Props> = ({ accessibleRefAttachments }) => {
}}
>
<FastImage
enterTransition='fadeIn'
transitionDuration={60}
style={{ width: '100%', height: '100%' }}
source={
item.local?.thumbnail
? { uri: item.local?.thumbnail }
: connectImage({ uri: item.remote?.preview_url })
: connectMedia({ uri: item.remote?.preview_url })
}
/>
{item.remote?.meta?.original?.duration ? (

View File

@ -37,6 +37,7 @@ const TabMePush: React.FC = () => {
const appsQuery = useAppsQuery({
options: {
enabled: false,
onSuccess: async data => {
if (data.vapid_key) {
await checkPush()
@ -49,6 +50,9 @@ const TabMePush: React.FC = () => {
}
}
})
useEffect(() => {
appsQuery.refetch()
}, [])
const checkPush = async () => {
const permissions = await Notifications.getPermissionsAsync()
@ -75,22 +79,20 @@ const TabMePush: React.FC = () => {
<MenuRow
key={alert}
title={t(`me.push.${alert}.heading`)}
// switchDisabled={!pushEnabled || !push.global}
switchValue={push?.alerts[alert]}
switchOnValueChange={async () => {
const alerts = { ...push?.alerts, [alert]: !push?.alerts[alert] }
const body: { data: { alerts: { [key: string]: boolean } } } = {
data: { alerts: {} }
}
for (const [key, value] of Object.entries(alerts)) {
body.data.alerts[key] = value
}
await apiInstance<Mastodon.PushSubscription>({
method: 'put',
url: 'push/subscription',
body
})
if (pushEnabled && push.global) {
const body: { data: { alerts: Mastodon.PushSubscription['alerts'] } } = {
data: { alerts }
}
await apiInstance<Mastodon.PushSubscription>({
method: 'put',
url: 'push/subscription',
body
})
}
setAccountStorage([{ key: 'push', value: { ...push, alerts } }])
}}
@ -105,22 +107,22 @@ const TabMePush: React.FC = () => {
<MenuRow
key={type}
title={t(`me.push.${type}.heading`)}
// switchDisabled={!pushEnabled || !push.global}
switchValue={push?.alerts[type]}
switchOnValueChange={async () => {
const alerts = { ...push?.alerts, [type]: !push?.alerts[type] }
const body: { data: { alerts: { [key: string]: boolean } } } = {
data: { alerts: {} }
}
for (const [key, value] of Object.entries(alerts)) {
body.data.alerts[key] = value
}
await apiInstance<Mastodon.PushSubscription>({
method: 'put',
url: 'push/subscription',
body
})
if (pushEnabled && push.global) {
const body: {
data: { alerts: Mastodon.PushSubscription['alerts'] }
} = {
data: { alerts }
}
await apiInstance<Mastodon.PushSubscription>({
method: 'put',
url: 'push/subscription',
body
})
}
setAccountStorage([{ key: 'push', value: { ...push, alerts } }])
}}
@ -194,7 +196,10 @@ const TabMePush: React.FC = () => {
const endpoint = `https://${TOOOT_API_DOMAIN}/push/send/${pushPath}/${randomPath}`
const body: { subscription: any; alerts: { [key: string]: boolean } } = {
const body: {
subscription: any
alerts: Mastodon.PushSubscription['alerts']
} = {
subscription: {
endpoint,
keys: {
@ -203,10 +208,7 @@ const TabMePush: React.FC = () => {
auth: authKey
}
},
alerts: {}
}
for (const [key, value] of Object.entries(push.alerts)) {
body.alerts[key] = value
alerts: push.alerts
}
const res = await apiInstance<Mastodon.PushSubscription>({
@ -222,6 +224,10 @@ const TabMePush: React.FC = () => {
message: t('me.push.missingServerKey.message'),
description: t('me.push.missingServerKey.description')
})
await apiInstance({
method: 'delete',
url: 'push/subscription'
})
Sentry.setContext('Push server key', {
instance: domain,
resBody: res.body
@ -238,6 +244,11 @@ const TabMePush: React.FC = () => {
serverKey: res.body.server_key,
auth: push.decode === false ? null : authKey
}
}).catch(async () => {
await apiInstance({
method: 'delete',
url: 'push/subscription'
})
})
setAccountStorage([

View File

@ -43,6 +43,8 @@ const SettingsApp: React.FC = () => {
})
}, [])
const [clearingCache, setClearingCache] = useState(false)
return (
<MenuContainer>
<MenuRow
@ -168,7 +170,7 @@ const SettingsApp: React.FC = () => {
/>
<MenuRow
title={t('screenTabs:me.settings.autoplayGifv.heading')}
switchValue={autoplayGifv}
switchValue={autoplayGifv || false}
switchOnValueChange={() => setAutoplayGifv(!autoplayGifv)}
/>
{showConnect ? (

View File

@ -74,14 +74,14 @@ const list = [
'vq2rz02ayf'
]
export const CONNECT_DOMAIN = () =>
export const CONNECT_DOMAIN = (index?: number) =>
mapEnvironment({
release: `${list[Math.floor(Math.random() * 66)]}.tooot.app`,
release: `${list[index || Math.floor(Math.random() * list.length)]}.tooot.app`,
candidate: 'connect-candidate.tooot.app',
development: 'connect-development.tooot.app'
})
export const connectImage = ({
export const connectMedia = ({
uri
}: {
uri?: string
@ -89,7 +89,19 @@ export const connectImage = ({
if (GLOBAL.connect) {
if (uri) {
const host = parse(uri).host
return { uri: uri.replace(host, CONNECT_DOMAIN()), headers: { 'x-tooot-domain': host } }
return {
uri: uri.replace(
host,
CONNECT_DOMAIN(
uri
.split('')
.map(i => i.charCodeAt(0))
.reduce((a, b) => a + b, 0) %
(list.length + 1)
)
),
headers: { 'x-tooot-domain': host }
}
} else {
return { uri }
}

View File

@ -61,20 +61,9 @@ export const queryFunctionTimeline = async ({
let marker: string | undefined
if (page.page === 'Following' && !pageParam?.offset && !pageParam?.min_id && !pageParam?.max_id) {
const storedMarker = getAccountStorage.string('read_marker_following')
if (storedMarker) {
await apiInstance<Mastodon.Status[]>({
method: 'get',
url: 'timelines/home',
params: { limit: 1, min_id: storedMarker }
}).then(res => {
if (res.body.length) {
marker = storedMarker
}
})
}
marker = getAccountStorage.string('read_marker_following')
}
let params: { [key: string]: string } = marker
const params: { [key: string]: string } = marker
? { limit: 40, max_id: marker }
: { limit: 40, ...pageParam }
@ -353,14 +342,23 @@ export type MutationVarsTimeline =
const mutationFunction = async (params: MutationVarsTimeline) => {
switch (params.type) {
case 'updateStatusProperty':
let tootId = params.status.id
let pollId = params.status.poll?.id
if (params.status._remote) {
const fetched = await searchLocalStatus(params.status.uri)
if (fetched) {
tootId = fetched.id
pollId = fetched.poll?.id
} else {
return Promise.reject('Fetching for remote toot failed')
}
}
switch (params.payload.type) {
case 'poll':
return apiInstance<Mastodon.Poll>({
method: params.payload.action === 'vote' ? 'post' : 'get',
url:
params.payload.action === 'vote'
? `polls/${params.status.poll?.id}/votes`
: `polls/${params.status.poll?.id}`,
url: params.payload.action === 'vote' ? `polls/${pollId}/votes` : `polls/${pollId}`,
...(params.payload.action === 'vote' && {
body: {
choices: params.payload.options
@ -370,15 +368,6 @@ const mutationFunction = async (params: MutationVarsTimeline) => {
})
})
default:
let tootId = params.status.id
if (params.status._remote) {
const fetched = await searchLocalStatus(params.status.uri)
if (fetched) {
tootId = fetched.id
} else {
return Promise.reject('Fetching for remote toot failed')
}
}
return apiInstance<Mastodon.Status>({
method: 'post',
url: `statuses/${tootId}/${params.payload.to ? '' : 'un'}${

View File

@ -33,9 +33,13 @@ export const getGlobalStorage = {
object: <T extends keyof StorageGlobal>(key: T) => {
const value = storage.global.getString(key)
if (value?.length) {
return JSON.parse(value) as NonNullable<StorageGlobal[T]> extends object
? StorageGlobal[T]
: never
try {
return JSON.parse(value) as NonNullable<StorageGlobal[T]> extends object
? StorageGlobal[T]
: never
} catch {
return undefined
}
} else {
return undefined
}
@ -108,9 +112,13 @@ export const getAccountStorage = {
object: <T extends keyof StorageAccount>(key: T) => {
const value = storage.account?.getString(key)
if (value?.length) {
return JSON.parse(value) as NonNullable<StorageAccount[T]> extends object
? StorageAccount[T]
: never
try {
return JSON.parse(value) as NonNullable<StorageAccount[T]> extends object
? StorageAccount[T]
: never
} catch {
return undefined
}
} else {
return undefined
}

View File

@ -1,3 +1,4 @@
const adaptiveScale = (size: number, factor: number = 0) => Math.round(size + size * (factor / 8))
const adaptiveScale = (size: number, factor: number = 0) =>
factor ? Math.round(size + size * (factor / 8)) : size
export { adaptiveScale }

358
yarn.lock
View File

@ -2005,23 +2005,23 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/fast-memoize@npm:1.2.7":
version: 1.2.7
resolution: "@formatjs/fast-memoize@npm:1.2.7"
"@formatjs/fast-memoize@npm:1.2.8":
version: 1.2.8
resolution: "@formatjs/fast-memoize@npm:1.2.8"
dependencies:
tslib: ^2.4.0
checksum: ba372a3e931bd99729d993f5b95aeb43e7d07b9f71e759722cc20c4e2faa0af11a942f0df9023a029b03230dc4dfad5354755be1e385c465750f63e4b3372b7b
checksum: 19f7f04657363d3ca4854ba3e5ecf4ae5bf0575c12ba8b2b24a7128131b38d91cf2692aeab778d42e9aa2e27cd2ea3b1e23cabf8ce4dff42988dcf65582c3a94
languageName: node
linkType: hard
"@formatjs/icu-messageformat-parser@npm:2.1.14":
version: 2.1.14
resolution: "@formatjs/icu-messageformat-parser@npm:2.1.14"
"@formatjs/icu-messageformat-parser@npm:2.2.0":
version: 2.2.0
resolution: "@formatjs/icu-messageformat-parser@npm:2.2.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/icu-skeleton-parser": 1.3.18
tslib: ^2.4.0
checksum: 4d13230af075a353eef4725bee67d46bfc40f4873e561c141a2e62b91e377ffa7fffe61ee6df6bb187a00e15ab6fe242014958d51e4c6056032801178eb7e1c8
checksum: bd457714296a3503d57383ee9ba8c9fb01e0097379c2bcf18c827ff736f64cf83132f2ab539f534b716726d6554beede354c30180d543dd8a1cf8e4c8f842bd7
languageName: node
linkType: hard
@ -2046,14 +2046,14 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/intl-displaynames@npm:6.2.3":
version: 6.2.3
resolution: "@formatjs/intl-displaynames@npm:6.2.3"
"@formatjs/intl-displaynames@npm:6.2.4":
version: 6.2.4
resolution: "@formatjs/intl-displaynames@npm:6.2.4"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/intl-localematcher": 0.2.32
tslib: ^2.4.0
checksum: 2e5fe38231858f66f44eb740a5e0576f98c9039b49ad81a02c4bcb62de6425e3951413c3fa487dd1ad42cd25c0b8d725adac6ceddf841f94b97ca22e753f3d56
checksum: 17cee1a7f81260a2b6bab1606bc3fa3eea777f454fb7d233a8d50befa9e02a1b3bf5ce5a4a6030a3ad86f60ea65cdce273e1d562dab1fdbe2dd42b254e31320f
languageName: node
linkType: hard
@ -2130,23 +2130,23 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/intl@npm:2.6.3":
version: 2.6.3
resolution: "@formatjs/intl@npm:2.6.3"
"@formatjs/intl@npm:2.6.5":
version: 2.6.5
resolution: "@formatjs/intl@npm:2.6.5"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/fast-memoize": 1.2.7
"@formatjs/icu-messageformat-parser": 2.1.14
"@formatjs/intl-displaynames": 6.2.3
"@formatjs/fast-memoize": 1.2.8
"@formatjs/icu-messageformat-parser": 2.2.0
"@formatjs/intl-displaynames": 6.2.4
"@formatjs/intl-listformat": 7.1.7
intl-messageformat: 10.2.5
intl-messageformat: 10.3.0
tslib: ^2.4.0
peerDependencies:
typescript: ^4.7
peerDependenciesMeta:
typescript:
optional: true
checksum: 1922ec1d63aed8f42bb09967fffbaa4f37f59a351dd34ccddf28b268d04b05a80c9a7790f61292cf97fec4d47e15177b52987a28b5fb10df96aed5f5008dfc5f
checksum: c0c8ccbc8bcffc245a5ec6654271dc99dd48359c6dfa21666824be55a7e2b0be8e6f0a1277d1e539064fa2eb72c5349d9ea7ae6ab207191a3adf00c68b1eab7f
languageName: node
linkType: hard
@ -2276,15 +2276,15 @@ __metadata:
languageName: node
linkType: hard
"@mattermost/react-native-paste-input@npm:^0.6.0":
version: 0.6.0
resolution: "@mattermost/react-native-paste-input@npm:0.6.0"
"@mattermost/react-native-paste-input@npm:^0.6.1":
version: 0.6.1
resolution: "@mattermost/react-native-paste-input@npm:0.6.1"
dependencies:
semver: 7.3.8
peerDependencies:
react: "*"
react-native: "*"
checksum: 95fe8d9652f80793a245ad3a6b3cfebc152ea9a0243982507d3ac83844e6ca21723e62337fa3db7690af33d9f9427ad097c75863793b55321c0a0d55f53f7a11
checksum: dacab6215171bcec9f150fd1001c547b0ddee26d1718a835dbcc715535c5f1b6d2c98d55284d724b45ed43e449ad146617dcee92b5e2484c7558f9bf378946b4
languageName: node
linkType: hard
@ -2979,9 +2979,9 @@ __metadata:
languageName: node
linkType: hard
"@react-native-firebase/app@npm:^16.5.2":
version: 16.5.2
resolution: "@react-native-firebase/app@npm:16.5.2"
"@react-native-firebase/app@npm:^16.7.0":
version: 16.7.0
resolution: "@react-native-firebase/app@npm:16.7.0"
dependencies:
"@expo/config-plugins": ^5.0.4
opencollective-postinstall: ^2.0.1
@ -2989,7 +2989,7 @@ __metadata:
peerDependencies:
react: "*"
react-native: "*"
checksum: 8fd7dd614523f53e34e7488c7baf9cb279db1e0db8e0a3ab0aabc71a77c054af7876dc070e4c86ffb0406bae2fb240495954e95891a7047ed1c6e74f4a4de716
checksum: d3274ac0461e7524849c544bd00bd628b7a305f1798c33c28367dff4a8c3e55ae2d8428f8ae2d2cb3ed99760054a7cf6cceaca43052015497cd7ae162272b3e7
languageName: node
linkType: hard
@ -3038,11 +3038,11 @@ __metadata:
languageName: node
linkType: hard
"@react-navigation/bottom-tabs@npm:^6.5.3":
version: 6.5.3
resolution: "@react-navigation/bottom-tabs@npm:6.5.3"
"@react-navigation/bottom-tabs@npm:^6.5.4":
version: 6.5.4
resolution: "@react-navigation/bottom-tabs@npm:6.5.4"
dependencies:
"@react-navigation/elements": ^1.3.13
"@react-navigation/elements": ^1.3.14
color: ^4.2.3
warn-once: ^0.1.0
peerDependencies:
@ -3051,7 +3051,7 @@ __metadata:
react-native: "*"
react-native-safe-area-context: ">= 3.0.0"
react-native-screens: ">= 3.0.0"
checksum: 7e222f39035e84d8bc98ba4937fea0e0ece1307c85b7102a6e3f19ce5b2550cfc83c1c1b68ef6e885b3d325863df442ca524d5ab34c262837cea179366383358
checksum: c37f25625da14d1b17ea4c4d35c320da917fc4fd5c0191b132474501264cfffe9268c1fb55408d6b9b9f16b511f8f9100b52c7933b7528bf66a28e13793845c1
languageName: node
linkType: hard
@ -3071,23 +3071,23 @@ __metadata:
languageName: node
linkType: hard
"@react-navigation/elements@npm:^1.3.13":
version: 1.3.13
resolution: "@react-navigation/elements@npm:1.3.13"
"@react-navigation/elements@npm:^1.3.14":
version: 1.3.14
resolution: "@react-navigation/elements@npm:1.3.14"
peerDependencies:
"@react-navigation/native": ^6.0.0
react: "*"
react-native: "*"
react-native-safe-area-context: ">= 3.0.0"
checksum: 341d8d44ecda16bbed990d40f10bedd368d579ffe1fd4568f0293f97299768167a110763170da92ff14ccff3916704dbc133465776ecdc9ac65cc8bf3caa1e31
checksum: bf0856fb4dda63dcd21f3e6c9136fdf749e35a02e97741915d225f770348eea0ba8aea9875f653c984b12420cfb2a4a55cd5c0e4e033976d9e51be7ae27cf1a7
languageName: node
linkType: hard
"@react-navigation/native-stack@npm:^6.9.8":
version: 6.9.8
resolution: "@react-navigation/native-stack@npm:6.9.8"
"@react-navigation/native-stack@npm:^6.9.9":
version: 6.9.9
resolution: "@react-navigation/native-stack@npm:6.9.9"
dependencies:
"@react-navigation/elements": ^1.3.13
"@react-navigation/elements": ^1.3.14
warn-once: ^0.1.0
peerDependencies:
"@react-navigation/native": ^6.0.0
@ -3095,13 +3095,13 @@ __metadata:
react-native: "*"
react-native-safe-area-context: ">= 3.0.0"
react-native-screens: ">= 3.0.0"
checksum: 37413ffc79f442860cc1cbd51d4f9c8160e5a01826ca7e1b815e88f2a24b5df53dc6c604a76e099aa6a2ad809c093b253924095e975ad76325fdc443e6457b02
checksum: 03bdb6e990fbc5146642b2a2007a3ef73793bc9151a89bc64b86ca5ecf16c509eec865d2443eb87a72ada146e7c54441c552c69e7971a13d81c7117e97f8eeb7
languageName: node
linkType: hard
"@react-navigation/native@npm:^6.1.2":
version: 6.1.2
resolution: "@react-navigation/native@npm:6.1.2"
"@react-navigation/native@npm:^6.1.3":
version: 6.1.3
resolution: "@react-navigation/native@npm:6.1.3"
dependencies:
"@react-navigation/core": ^6.4.6
escape-string-regexp: ^4.0.0
@ -3110,7 +3110,7 @@ __metadata:
peerDependencies:
react: "*"
react-native: "*"
checksum: 1bdf5339cccc1c40f780929738790f6d7d80533c80c3db80c598870f124782d83f4842b63a2bced55e040d120fc0de419d780fd906108c5358a83cde540b595e
checksum: 8aa9d60d0c135381691363ec438db90d2584cb48fb99dbf6707a61b81bce709e5407cde3c1d93c4966245069bc5149d8925a4ef512906619cfac057cacdc43d9
languageName: node
linkType: hard
@ -3123,11 +3123,11 @@ __metadata:
languageName: node
linkType: hard
"@react-navigation/stack@npm:^6.3.11":
version: 6.3.11
resolution: "@react-navigation/stack@npm:6.3.11"
"@react-navigation/stack@npm:^6.3.12":
version: 6.3.12
resolution: "@react-navigation/stack@npm:6.3.12"
dependencies:
"@react-navigation/elements": ^1.3.13
"@react-navigation/elements": ^1.3.14
color: ^4.2.3
warn-once: ^0.1.0
peerDependencies:
@ -3137,7 +3137,7 @@ __metadata:
react-native-gesture-handler: ">= 1.0.0"
react-native-safe-area-context: ">= 3.0.0"
react-native-screens: ">= 3.0.0"
checksum: a826f3ed56b280e27762c08e822e88c33b395d51cfa5b277dd45f7d7ef1884674222ce316a102c36ea5f96e554f7f45673e87c0715799689f9533ddc272b0d2d
checksum: 09e793edb0bb56edacdb3446a001eeb6f388d125dcbabf76a0e6d0531a48db3f68a0535fafb322a290e8511cc8390ab5e9d2ee4bda8604552368fabffe438793
languageName: node
linkType: hard
@ -3151,16 +3151,16 @@ __metadata:
languageName: node
linkType: hard
"@sentry/browser@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/browser@npm:7.29.0"
"@sentry/browser@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/browser@npm:7.32.1"
dependencies:
"@sentry/core": 7.29.0
"@sentry/replay": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.32.1
"@sentry/replay": 7.32.1
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
tslib: ^1.9.3
checksum: 136b9d03a9ff38e72f4d8fd335f23469341d0095d1f075a36d85ef2cd6bd0763635a7e1cbc7abe14508291e88cffe549eda6016c858564b55c1d4e81ef67882f
checksum: 279b2bfb32256456cf3bb59a5a2aa6667047455103a8a4fd03e9f765e83c7cda130c1f6881251d5be08f43674ebf66e92d5f2b1351b62c4bac42d4e9e44f00fe
languageName: node
linkType: hard
@ -3198,116 +3198,114 @@ __metadata:
languageName: node
linkType: hard
"@sentry/core@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/core@npm:7.29.0"
"@sentry/core@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/core@npm:7.32.1"
dependencies:
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
tslib: ^1.9.3
checksum: d9330ed3528f2328b524cb237e400368dcb6c36b8afb791d28141e98ab5c0b56dc306a65cfc7164108cb5616346dabe793a39a140257f723906dc25a03b7ebcd
checksum: 74ce787414d5993efe74ad5e8d47824b57d258cc4374259bbaaaab337ff4981f8c4d40bfb617b33a4733dc6890d12728aa6a75fb8ddab5a844cb82165963f451
languageName: node
linkType: hard
"@sentry/hub@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/hub@npm:7.29.0"
"@sentry/hub@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/hub@npm:7.32.1"
dependencies:
"@sentry/core": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.32.1
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
tslib: ^1.9.3
checksum: dc6eb1744cb68eabfa5bd1a919b0ae0df721d34b36d1b8c5e9612b9d8ab9329560b89542b9b06157e39330c5cd34a157fa8a3a7509bb4a7f007b2083c5046f80
checksum: 0b0a2a9640762dc1011071172a853d643076c9e51e958f13a4219b8d4cf799c0b4d996c813a28b2040cc2a50eb4d7cd907d8c6cf9537f6a6860d6dc18f553b60
languageName: node
linkType: hard
"@sentry/integrations@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/integrations@npm:7.29.0"
"@sentry/integrations@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/integrations@npm:7.32.1"
dependencies:
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
localforage: ^1.8.1
tslib: ^1.9.3
checksum: fec2b9b7902b9b097b5453ae4c797e4efa18ac05a3b539c58d037085e12846f443ebe2e8d916a273ee4df71a29891265db5723b7fd4b5e8287fe5864cb9b2e43
checksum: 8cd7071f742100d0505029f1e8c34bfbed8fa85d4e0a9b2be13b0023e2dd18396ed3634b73a0528f22067b77208d418dbb71ba3ecffb969a42ccae63859fd8b1
languageName: node
linkType: hard
"@sentry/react-native@npm:4.13.0":
version: 4.13.0
resolution: "@sentry/react-native@npm:4.13.0"
"@sentry/react-native@npm:4.14.0":
version: 4.14.0
resolution: "@sentry/react-native@npm:4.14.0"
dependencies:
"@sentry/browser": 7.29.0
"@sentry/browser": 7.32.1
"@sentry/cli": 1.74.4
"@sentry/core": 7.29.0
"@sentry/hub": 7.29.0
"@sentry/integrations": 7.29.0
"@sentry/react": 7.29.0
"@sentry/tracing": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.32.1
"@sentry/hub": 7.32.1
"@sentry/integrations": 7.32.1
"@sentry/react": 7.32.1
"@sentry/tracing": 7.32.1
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
"@sentry/wizard": 1.4.0
peerDependencies:
react: ">=16.4.1"
react-native: ">=0.56.0"
checksum: 8f83147409b31854ae2c1cc485ce20a86f8f70ef83dfa52d5547f3ffa3202e5de5bf14e306dff6c280752677b813e00505d80dfa6b1bf110c4749be9f6215919
checksum: 583eaac87678ac50e3cfde68ecb418821ac8d3eadd4560dbdb01b026804cd9d46b78f2e565dd9fa6fb208bafe4d85409094a8fb4fb261de44f57fa92338bf5fe
languageName: node
linkType: hard
"@sentry/react@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/react@npm:7.29.0"
"@sentry/react@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/react@npm:7.32.1"
dependencies:
"@sentry/browser": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/browser": 7.32.1
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
hoist-non-react-statics: ^3.3.2
tslib: ^1.9.3
peerDependencies:
react: 15.x || 16.x || 17.x || 18.x
checksum: 022bf398f2cf43bf5e1f7340cfc02ccfc4cdc026fb3d6805e760d182bcb2601d413cf412beaa37fecbbf0dc554ce38c4a01d9bf38d1591f80cd059ee5235205d
checksum: 3e67b9b9c959aced9d7dd1779c40b7bba60ea4170e30fb1a3e167286fe6649459401e22ada268c51c836ddbda934777cb867d36577d7294f5c38e51e98c1f5e3
languageName: node
linkType: hard
"@sentry/replay@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/replay@npm:7.29.0"
"@sentry/replay@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/replay@npm:7.32.1"
dependencies:
"@sentry/core": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
peerDependencies:
"@sentry/browser": ">=7.24.0"
checksum: 539e18c128bb7966c9d4ea91ebd9cde6d42f42f96fa648d7ead5bff699e643f3792f57a344376586fab26f659f5e1431176faf0e12e6ea53508fd48ba928dd12
"@sentry/core": 7.32.1
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
checksum: 0df5b054a1542567b66566ef0529bd7a48692711e20212a2ef1aca6deb50f9725adbc8eade33ba4a91980fb17d0409a37ea8013903652f3931e8cdd6fd57bcda
languageName: node
linkType: hard
"@sentry/tracing@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/tracing@npm:7.29.0"
"@sentry/tracing@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/tracing@npm:7.32.1"
dependencies:
"@sentry/core": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.32.1
"@sentry/types": 7.32.1
"@sentry/utils": 7.32.1
tslib: ^1.9.3
checksum: 7ad9040664a8c65693aba2bdd9cecc8334ce25a296c01727d38649c7141106b78c92142626ce8e44983b4272e0f411010a3df99843a1af6d4f89e4f67ce6f57e
checksum: b62b9cc4d4c1ace95a665046cbc43445f3503c83b18d23bc848546695b6d282138dc9df26116a8b14917ab4285df64e3af6e458e4e63b0f0fe54725a28b0bc29
languageName: node
linkType: hard
"@sentry/types@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/types@npm:7.29.0"
checksum: 53815b66662a193cfd7024b9fb2477afb8178a771aa59f3bef10578cc940a9d7207722f9f04e2ca65a8e118cef012ac42f4936aa921aacdfc00a914bec88b009
"@sentry/types@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/types@npm:7.32.1"
checksum: f543a315ad818546fd97c97b0bdb010e101a8757c901b95f46e6e9f122ba1034ddd656c38e2359cb0892c90734d17513fb5f66247d7dda4598e879c36f4023c0
languageName: node
linkType: hard
"@sentry/utils@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/utils@npm:7.29.0"
"@sentry/utils@npm:7.32.1":
version: 7.32.1
resolution: "@sentry/utils@npm:7.32.1"
dependencies:
"@sentry/types": 7.29.0
"@sentry/types": 7.32.1
tslib: ^1.9.3
checksum: 9914a2129692a5713453437d75b957a18ad5a4ef8085776e5499208ad329dea8da27ee2e2b74fdc089a3831b4e2929f8e6c0f3bc75528f41023d85de5077f462
checksum: 1b0d82cbccb9dfd80f5bc8a7deec59db15f5bb5718da4184d5e70f7765fb4ca90d4489387cec7a384872f7a8742fc9ba4e21c41607adbbd68fce1c1935b67bf8
languageName: node
linkType: hard
@ -3367,18 +3365,18 @@ __metadata:
languageName: node
linkType: hard
"@tanstack/query-core@npm:4.22.4":
version: 4.22.4
resolution: "@tanstack/query-core@npm:4.22.4"
checksum: 01663a36ad7ed5c43cb7cfa8ffcdf7df4de05cf68e9991bbc339be2a656a1c94f69e0b5405dfa972cf877b09dac3cba4cbdf8c91f5dffabc46ac32ec0ce5f4bb
"@tanstack/query-core@npm:4.24.4":
version: 4.24.4
resolution: "@tanstack/query-core@npm:4.24.4"
checksum: b357e950a41e5769878a3bfe9dd56a66828ccebb2f9396e568e8835bed71eb37926770a461e3aa5bafb7e1121c5141cee86aedf3ced88a2eacf754d545b107cd
languageName: node
linkType: hard
"@tanstack/react-query@npm:^4.23.0":
version: 4.23.0
resolution: "@tanstack/react-query@npm:4.23.0"
"@tanstack/react-query@npm:^4.24.4":
version: 4.24.4
resolution: "@tanstack/react-query@npm:4.24.4"
dependencies:
"@tanstack/query-core": 4.22.4
"@tanstack/query-core": 4.24.4
use-sync-external-store: ^1.2.0
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@ -3389,7 +3387,7 @@ __metadata:
optional: true
react-native:
optional: true
checksum: 166140855f8806e951e9a4ebccb5ba354eb2abc314e6b6ff696d2a1a8720e9ea868221f62d58004101e44899b61fdf57a40fe286bb13233645e292cd5567545c
checksum: 8cf008d690fc5d336f6471ea2bc0751189f03874dcc7930cf8944fb57fa34e3b5347823775dbd36629d53a7aacb9ce87482b1adb3ad80d277a3a6c73b797f6a2
languageName: node
linkType: hard
@ -3507,12 +3505,12 @@ __metadata:
languageName: node
linkType: hard
"@types/react-native@npm:^0.70.9":
version: 0.70.9
resolution: "@types/react-native@npm:0.70.9"
"@types/react-native@npm:^0.70.10":
version: 0.70.10
resolution: "@types/react-native@npm:0.70.10"
dependencies:
"@types/react": "*"
checksum: 52b362f518c8a912174ae7cda1b20532bee11c2767794efcc0300650b750f72bcd8852435105559155f202504a742fe6e50f4e3cc4c1a9836dea9db132410ce3
checksum: fbf0cac9413d37023a2acafdca4b03cb8a8826c58ec7c82a8a23019929ef3d9d87a36a6de7edd899a1346b95ab71629cf67fd679dd5407d2c807b2430ea69862
languageName: node
linkType: hard
@ -6915,15 +6913,15 @@ __metadata:
languageName: node
linkType: hard
"intl-messageformat@npm:10.2.5":
version: 10.2.5
resolution: "intl-messageformat@npm:10.2.5"
"intl-messageformat@npm:10.3.0":
version: 10.3.0
resolution: "intl-messageformat@npm:10.3.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/fast-memoize": 1.2.7
"@formatjs/icu-messageformat-parser": 2.1.14
"@formatjs/fast-memoize": 1.2.8
"@formatjs/icu-messageformat-parser": 2.2.0
tslib: ^2.4.0
checksum: 048d6e3e746bff5ea6d745c8cbc2d0049aadb42caf2bad0d47e0bcf9bede285ef48a1fbd3a87711b99587d270d2ab8d9488e51577b24a2227856cdf373dd25df
checksum: a92b2fec9ed0ba992ecfefbe9968c0f80961d6d23d105b16f3437108c61fe57d6e91e04392c4092335136399e047572996bc45d197ec0899473a3aac3627fed2
languageName: node
linkType: hard
@ -9565,19 +9563,19 @@ __metadata:
languageName: node
linkType: hard
"react-intl@npm:^6.2.5":
version: 6.2.5
resolution: "react-intl@npm:6.2.5"
"react-intl@npm:^6.2.7":
version: 6.2.7
resolution: "react-intl@npm:6.2.7"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/icu-messageformat-parser": 2.1.14
"@formatjs/intl": 2.6.3
"@formatjs/intl-displaynames": 6.2.3
"@formatjs/icu-messageformat-parser": 2.2.0
"@formatjs/intl": 2.6.5
"@formatjs/intl-displaynames": 6.2.4
"@formatjs/intl-listformat": 7.1.7
"@types/hoist-non-react-statics": ^3.3.1
"@types/react": 16 || 17 || 18
hoist-non-react-statics: ^3.3.2
intl-messageformat: 10.2.5
intl-messageformat: 10.3.0
tslib: ^2.4.0
peerDependencies:
react: ^16.6.0 || 17 || 18
@ -9585,7 +9583,7 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 826b6ed593b367ad0a375de4e84b3ca3c7334c6583dcf307bb90e9c45c79c7f85cf43f6d15d15b9827e1da1d13f807b802c252a6725d0af4bd5a3fd43cbd9879
checksum: c842bec10a78b88e53b54170bcd7819ec4f324abf18400f6a66049f4f78af587064fbb156b0f04e0a02d4b60407dcce713c2140b266a41762c6b8a5a54a7627d
languageName: node
linkType: hard
@ -9653,11 +9651,11 @@ __metadata:
"react-native-fast-image@patch:react-native-fast-image@npm%3A8.6.3#./.yarn/patches/react-native-fast-image-npm-8.6.3-03ee2d23c0.patch::locator=tooot%40workspace%3A.":
version: 8.6.3
resolution: "react-native-fast-image@patch:react-native-fast-image@npm%3A8.6.3#./.yarn/patches/react-native-fast-image-npm-8.6.3-03ee2d23c0.patch::version=8.6.3&hash=65bdbb&locator=tooot%40workspace%3A."
resolution: "react-native-fast-image@patch:react-native-fast-image@npm%3A8.6.3#./.yarn/patches/react-native-fast-image-npm-8.6.3-03ee2d23c0.patch::version=8.6.3&hash=1a9a6d&locator=tooot%40workspace%3A."
peerDependencies:
react: ^17 || ^18
react-native: ">=0.60.0"
checksum: 09d7ccebd6075b85fc06d60093edf2611d97a6571b5bcd7d915df0316866a09d3bf9a74960a64aa75ac8901c9840f78b70aac58ff8b6ac627968259151109328
checksum: 4b2c6b2d6fc461f26936ff5033acccf7aef15f9d176ea835d09c87bee83accbb6c2b98a2435ad019a305c0751aa43040c153a6d5735664ace31e64aad0b2bc61
languageName: node
linkType: hard
@ -9839,16 +9837,16 @@ __metadata:
languageName: node
linkType: hard
"react-native-svg@npm:^13.7.0":
version: 13.7.0
resolution: "react-native-svg@npm:13.7.0"
"react-native-svg@npm:^13.8.0":
version: 13.8.0
resolution: "react-native-svg@npm:13.8.0"
dependencies:
css-select: ^5.1.0
css-tree: ^1.1.3
peerDependencies:
react: "*"
react-native: "*"
checksum: f3609dbb9d2614323914a8cc5ae11092aacb3a140e6d5ff57b255ddb6a9d2dc2efd5c28f65c6232e0b7228ec3231359540a7fa11ec92f944e6e98d570b147483
checksum: dfcad65978bb2e06a81b6f6262fad0699fa48e720ac2e521e983da4f6fb7747435f6a15df08b9d57559299272d0ffa674b4f0a55482f8b37905ee1e96f51b46a
languageName: node
linkType: hard
@ -9876,9 +9874,9 @@ __metadata:
languageName: node
linkType: hard
"react-native@npm:^0.70.6":
version: 0.70.6
resolution: "react-native@npm:0.70.6"
"react-native@npm:^0.70.7":
version: 0.70.7
resolution: "react-native@npm:0.70.7"
dependencies:
"@jest/create-cache-key-function": ^27.0.1
"@react-native-community/cli": 9.3.2
@ -9916,7 +9914,7 @@ __metadata:
react: 18.1.0
bin:
react-native: cli.js
checksum: ae57e1b86f4e6950913f8b59732ab57d2dd1ee30af6c2ca68f88b03b8448cb01c51967b148550a8b8cb6d42ca9b73cead2e854b9ecc2f4b9d5d75fccff798846
checksum: ec4af6e06b42ca98f5c404ca554daec758054bdae9be2fc03524fa2af4fb3baf436f7c971784fa82915777abec8fadbf1c86d6073a3fffb4a61322dea89fff78
languageName: node
linkType: hard
@ -11395,7 +11393,7 @@ __metadata:
"@formatjs/intl-numberformat": ^8.3.3
"@formatjs/intl-pluralrules": ^5.1.8
"@formatjs/intl-relativetimeformat": ^11.1.8
"@mattermost/react-native-paste-input": ^0.6.0
"@mattermost/react-native-paste-input": ^0.6.1
"@neverdull-agency/expo-unlimited-secure-store": ^1.0.10
"@react-native-async-storage/async-storage": ~1.17.11
"@react-native-camera-roll/camera-roll": ^5.2.3
@ -11403,21 +11401,21 @@ __metadata:
"@react-native-community/blur": ^4.3.0
"@react-native-community/netinfo": 9.3.7
"@react-native-community/segmented-control": ^2.2.2
"@react-native-firebase/app": ^16.5.2
"@react-native-firebase/app": ^16.7.0
"@react-native-menu/menu": ^0.7.3
"@react-navigation/bottom-tabs": ^6.5.3
"@react-navigation/native": ^6.1.2
"@react-navigation/native-stack": ^6.9.8
"@react-navigation/stack": ^6.3.11
"@sentry/react-native": 4.13.0
"@react-navigation/bottom-tabs": ^6.5.4
"@react-navigation/native": ^6.1.3
"@react-navigation/native-stack": ^6.9.9
"@react-navigation/stack": ^6.3.12
"@sentry/react-native": 4.14.0
"@sharcoux/slider": ^6.1.1
"@tanstack/react-query": ^4.23.0
"@tanstack/react-query": ^4.24.4
"@types/diff": ^5.0.2
"@types/linkify-it": ^3.0.2
"@types/lodash": ^4.14.191
"@types/react": ^18.0.27
"@types/react-dom": ^18.0.10
"@types/react-native": ^0.70.9
"@types/react-native": ^0.70.10
"@types/react-native-share-menu": ^5.0.2
"@types/url-parse": ^1.4.8
axios: ^1.2.4
@ -11452,8 +11450,8 @@ __metadata:
react: ^18.2.0
react-dom: ^18.2.0
react-i18next: ^12.1.4
react-intl: ^6.2.5
react-native: ^0.70.6
react-intl: ^6.2.7
react-native: ^0.70.7
react-native-blurhash: ^1.1.10
react-native-clean-project: ^4.0.1
react-native-fast-image: ^8.6.3
@ -11470,12 +11468,12 @@ __metadata:
react-native-safe-area-context: ^4.5.0
react-native-screens: ^3.19.0
react-native-share-menu: ^6.0.0
react-native-svg: ^13.7.0
react-native-svg: ^13.8.0
react-native-swipe-list-view: ^3.2.9
react-native-tab-view: ^3.3.4
react-redux: ^8.0.5
rn-placeholder: ^3.0.3
typescript: ^4.9.4
typescript: ^4.9.5
url-parse: ^1.5.10
zeego: ^1.0.2
languageName: unknown
@ -11570,23 +11568,23 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:^4.9.4":
version: 4.9.4
resolution: "typescript@npm:4.9.4"
"typescript@npm:^4.9.5":
version: 4.9.5
resolution: "typescript@npm:4.9.5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9
checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db
languageName: node
linkType: hard
"typescript@patch:typescript@^4.9.4#~builtin<compat/typescript>":
version: 4.9.4
resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin<compat/typescript>::version=4.9.4&hash=ad5954"
"typescript@patch:typescript@^4.9.5#~builtin<compat/typescript>":
version: 4.9.5
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=ad5954"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 1caaea6cb7f813e64345190fddc4e6c924d0b698ab81189b503763c4a18f7f5501c69362979d36e19c042d89d936443e768a78b0675690b35eb663d19e0eae71
checksum: 8f6260acc86b56bfdda6004bc53f32ea548f543e8baef7071c8e34d29d292f3e375c8416556c8de10b24deef6933cd1c16a8233dc84a3dd43a13a13265d0faab
languageName: node
linkType: hard