react-native-fast-image 8.30.1 → 8.31.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +460 -210
- package/android/build.gradle +13 -1
- package/android/src/glide-4.15/java/com/dylanvann/fastimage/FastImageAnimated.java +2 -2
- package/android/src/main/java/com/dylanvann/fastimage/FastImageApng.java +2 -2
- package/android/src/main/java/com/dylanvann/fastimage/FastImageGif.java +1 -1
- package/android/src/main/java/com/dylanvann/fastimage/FastImageGlide.java +76 -0
- package/android/src/main/java/com/dylanvann/fastimage/FastImageGlideModule.java +1 -0
- package/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java +25 -51
- package/android/src/main/java/com/dylanvann/fastimage/FastImageRequestListener.java +1 -2
- package/android/src/main/java/com/dylanvann/fastimage/FastImageSource.java +1 -1
- package/android/src/main/java/com/dylanvann/fastimage/FastImageSourceSize.java +1 -1
- package/android/src/main/java/com/dylanvann/fastimage/FastImageSvg.java +2 -0
- package/android/src/main/java/com/dylanvann/fastimage/FastImageUrl.java +36 -0
- package/android/src/main/java/com/dylanvann/fastimage/FastImageViewConverter.java +2 -1
- package/android/src/main/java/com/dylanvann/fastimage/FastImageViewManager.java +1 -0
- package/android/src/main/java/com/dylanvann/fastimage/FastImageViewModule.java +13 -10
- package/android/src/main/java/com/dylanvann/fastimage/FastImageWebGlideUrl.java +1 -0
- package/app.plugin.js +1 -1
- package/dist/index.d.ts +358 -63
- package/ios/FastImage/FFFAnimatedAVIFCoder.h +11 -0
- package/ios/FastImage/FFFAnimatedAVIFCoder.m +103 -0
- package/ios/FastImage/FFFastImageSource.h +4 -0
- package/ios/FastImage/FFFastImageSource.m +36 -2
- package/ios/FastImage/FFFastImageViewManager.m +1 -2
- package/package.json +4 -2
|
@@ -72,6 +72,10 @@ typedef NS_ENUM(NSInteger, FFFCacheControl) {
|
|
|
72
72
|
// a cache, where the size it was decoded from isn't recorded), or zero.
|
|
73
73
|
- (CGSize)photoPixelSize;
|
|
74
74
|
|
|
75
|
+
// Whether the data is an image FastImage can show: a format SDWebImage
|
|
76
|
+
// recognizes (an SVG only if its first element is <svg>), or one ImageIO
|
|
77
|
+
// reads that SDWebImage's check doesn't know (AVIF, ICO, ICNS, PSD).
|
|
78
|
+
+ (BOOL)isImageData:(NSData *)data;
|
|
75
79
|
// The HTTP cache of `cache: 'web'` images: their own rather than the app's
|
|
76
80
|
// shared NSURLCache, so clearDiskCache can empty it without the app's other
|
|
77
81
|
// responses. 50 MB, as on Android.
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
#import <SDWebImage/SDImageCodersManager.h>
|
|
9
9
|
#import <SDWebImage/SDImageAWebPCoder.h>
|
|
10
10
|
#import "FFFAnimatedWebPCoder.h"
|
|
11
|
+
#import "FFFAnimatedAVIFCoder.h"
|
|
11
12
|
#import <objc/message.h>
|
|
13
|
+
#import <ImageIO/ImageIO.h>
|
|
12
14
|
|
|
13
15
|
// In FFFastImageView.m.
|
|
14
16
|
FOUNDATION_EXTERN NSString *FFFErrorMessage(NSError *error);
|
|
@@ -224,8 +226,7 @@ static BOOL FFFLooksLikeSVG(NSData *data)
|
|
|
224
226
|
willCacheResponse:(NSCachedURLResponse *)proposedResponse
|
|
225
227
|
completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler
|
|
226
228
|
{
|
|
227
|
-
|
|
228
|
-
if (format == SDImageFormatUndefined || (format == SDImageFormatSVG && !FFFLooksLikeSVG(proposedResponse.data))) {
|
|
229
|
+
if (![FFFastImageSource isImageData:proposedResponse.data]) {
|
|
229
230
|
completionHandler(nil);
|
|
230
231
|
return;
|
|
231
232
|
}
|
|
@@ -260,6 +261,21 @@ static id<SDImageCoder> FFFSVGCoder;
|
|
|
260
261
|
[SDImageCodersManager.sharedManager addCoder:FFFAnimatedWebPCoder.sharedCoder];
|
|
261
262
|
}
|
|
262
263
|
|
|
264
|
+
// Animated AVIF: likewise, SDWebImage's own coders only decode an AVIF's
|
|
265
|
+
// first frame, so ImageIO's animated decoding does (iOS 16 and later).
|
|
266
|
+
// Not if the app has registered libavif's coder (SDWebImageAVIFCoder).
|
|
267
|
+
Class avifCoderClass = NSClassFromString(@"SDImageAVIFCoder");
|
|
268
|
+
BOOL hasAVIFCoder = NO;
|
|
269
|
+
for (id<SDImageCoder> registered in SDImageCodersManager.sharedManager.coders) {
|
|
270
|
+
if (avifCoderClass && [registered isKindOfClass:avifCoderClass]) {
|
|
271
|
+
hasAVIFCoder = YES;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (!hasAVIFCoder) {
|
|
276
|
+
[SDImageCodersManager.sharedManager addCoder:FFFAnimatedAVIFCoder.sharedCoder];
|
|
277
|
+
}
|
|
278
|
+
|
|
263
279
|
// SVG: registered with SDWebImage's coders, as the pod's setup does (unless
|
|
264
280
|
// the app has already): SDWebImage then picks it for SVG data, including
|
|
265
281
|
// for FastImage's animated and downsampled image classes. Giving the
|
|
@@ -396,6 +412,24 @@ static id<SDImageCoder> FFFSVGCoder;
|
|
|
396
412
|
[[FFFastImageSource webURLCache] removeCachedResponseForRequest:[NSURLRequest requestWithURL:_url]];
|
|
397
413
|
}
|
|
398
414
|
|
|
415
|
+
+ (BOOL)isImageData:(NSData *)data
|
|
416
|
+
{
|
|
417
|
+
SDImageFormat format = [NSData sd_imageFormatForImageData:data];
|
|
418
|
+
if (format == SDImageFormatSVG) {
|
|
419
|
+
return FFFLooksLikeSVG(data);
|
|
420
|
+
}
|
|
421
|
+
if (format != SDImageFormatUndefined) {
|
|
422
|
+
return YES;
|
|
423
|
+
}
|
|
424
|
+
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
|
|
425
|
+
if (!source) {
|
|
426
|
+
return NO;
|
|
427
|
+
}
|
|
428
|
+
BOOL image = CGImageSourceGetType(source) != NULL && CGImageSourceGetCount(source) > 0;
|
|
429
|
+
CFRelease(source);
|
|
430
|
+
return image;
|
|
431
|
+
}
|
|
432
|
+
|
|
399
433
|
+ (NSURLCache *)webURLCache
|
|
400
434
|
{
|
|
401
435
|
static NSURLCache *cache;
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
#import <SDWebImage/SDWebImageManager.h>
|
|
7
7
|
#import <SDWebImage/SDWebImageError.h>
|
|
8
8
|
#import <SDWebImage/SDWebImagePrefetcher.h>
|
|
9
|
-
#import <SDWebImage/NSData+ImageContentType.h>
|
|
10
9
|
|
|
11
10
|
// configureCache's limits, by their names in JS. Each is set in the app's
|
|
12
11
|
// Info.plist (FastImageMaxDiskSize, ...) or changed at runtime, which is saved
|
|
@@ -405,7 +404,7 @@ RCT_EXPORT_METHOD(writeToCache:(FFFastImageSource *)source
|
|
|
405
404
|
resolve(FFFFailure(@"Can't read the file"));
|
|
406
405
|
return;
|
|
407
406
|
}
|
|
408
|
-
if ([
|
|
407
|
+
if (![FFFastImageSource isImageData:data]) {
|
|
409
408
|
resolve(FFFFailure(@"Not an image"));
|
|
410
409
|
return;
|
|
411
410
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-fast-image",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.31.1",
|
|
4
4
|
"description": "FastImage, performant React Native image component.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cache",
|
|
@@ -38,7 +38,9 @@
|
|
|
38
38
|
"RNFastImage.podspec"
|
|
39
39
|
],
|
|
40
40
|
"scripts": {
|
|
41
|
-
"build": "
|
|
41
|
+
"build": "bun run build:package && bun run build:docs",
|
|
42
|
+
"build:package": "rm -rf dist && tsc -p tsconfig.build.json && rolldown -c",
|
|
43
|
+
"build:docs": "bun run --cwd website build",
|
|
42
44
|
"lint": "oxlint",
|
|
43
45
|
"release": "semantic-release",
|
|
44
46
|
"test": "bun test",
|