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.
Files changed (25) hide show
  1. package/README.md +460 -210
  2. package/android/build.gradle +13 -1
  3. package/android/src/glide-4.15/java/com/dylanvann/fastimage/FastImageAnimated.java +2 -2
  4. package/android/src/main/java/com/dylanvann/fastimage/FastImageApng.java +2 -2
  5. package/android/src/main/java/com/dylanvann/fastimage/FastImageGif.java +1 -1
  6. package/android/src/main/java/com/dylanvann/fastimage/FastImageGlide.java +76 -0
  7. package/android/src/main/java/com/dylanvann/fastimage/FastImageGlideModule.java +1 -0
  8. package/android/src/main/java/com/dylanvann/fastimage/FastImageOkHttpProgressGlideModule.java +25 -51
  9. package/android/src/main/java/com/dylanvann/fastimage/FastImageRequestListener.java +1 -2
  10. package/android/src/main/java/com/dylanvann/fastimage/FastImageSource.java +1 -1
  11. package/android/src/main/java/com/dylanvann/fastimage/FastImageSourceSize.java +1 -1
  12. package/android/src/main/java/com/dylanvann/fastimage/FastImageSvg.java +2 -0
  13. package/android/src/main/java/com/dylanvann/fastimage/FastImageUrl.java +36 -0
  14. package/android/src/main/java/com/dylanvann/fastimage/FastImageViewConverter.java +2 -1
  15. package/android/src/main/java/com/dylanvann/fastimage/FastImageViewManager.java +1 -0
  16. package/android/src/main/java/com/dylanvann/fastimage/FastImageViewModule.java +13 -10
  17. package/android/src/main/java/com/dylanvann/fastimage/FastImageWebGlideUrl.java +1 -0
  18. package/app.plugin.js +1 -1
  19. package/dist/index.d.ts +358 -63
  20. package/ios/FastImage/FFFAnimatedAVIFCoder.h +11 -0
  21. package/ios/FastImage/FFFAnimatedAVIFCoder.m +103 -0
  22. package/ios/FastImage/FFFastImageSource.h +4 -0
  23. package/ios/FastImage/FFFastImageSource.m +36 -2
  24. package/ios/FastImage/FFFastImageViewManager.m +1 -2
  25. 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
- SDImageFormat format = [NSData sd_imageFormatForImageData:proposedResponse.data];
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 ([NSData sd_imageFormatForImageData:data] == SDImageFormatUndefined) {
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.30.1",
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": "rm -rf dist && tsc -p tsconfig.build.json && rolldown -c && for f in index index.cjs index.web index.cjs.web; do cp src/index.js.flow dist/$f.js.flow; done",
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",