diff --git a/bun.lock b/bun.lock index 64e737e..6c8e3c2 100644 --- a/bun.lock +++ b/bun.lock @@ -21,7 +21,7 @@ }, "example": { "name": "NitroImageExample", - "version": "0.13.0", + "version": "0.13.1", "dependencies": { "@react-navigation/bottom-tabs": "^7.4.6", "@react-navigation/native": "^7.1.17", @@ -29,7 +29,7 @@ "react-native": "0.81.0", "react-native-fast-image": "^8.6.3", "react-native-nitro-image": "workspace:*", - "react-native-nitro-modules": "0.35.2", + "react-native-nitro-modules": "0.35.5", "react-native-nitro-web-image": "workspace:*", "react-native-safe-area-context": "^5.6.0", "react-native-screens": "^4.14.1", @@ -50,13 +50,13 @@ }, "packages/react-native-nitro-image": { "name": "react-native-nitro-image", - "version": "0.13.0", + "version": "0.13.1", "devDependencies": { "@types/react": "^19.0.6", - "nitrogen": "0.35.2", + "nitrogen": "0.35.5", "react": "19.1.0", "react-native": "0.81.0", - "react-native-nitro-modules": "0.35.2", + "react-native-nitro-modules": "0.35.5", "typescript": "5.8.3", }, "peerDependencies": { @@ -67,13 +67,13 @@ }, "packages/react-native-nitro-web-image": { "name": "react-native-nitro-web-image", - "version": "0.13.0", + "version": "0.13.1", "devDependencies": { "@types/react": "^19.0.6", - "nitrogen": "0.35.2", + "nitrogen": "0.35.5", "react": "19.1.0", "react-native": "0.81.0", - "react-native-nitro-modules": "0.35.2", + "react-native-nitro-modules": "0.35.5", "typescript": "5.8.3", }, "peerDependencies": { @@ -1257,7 +1257,7 @@ "new-github-release-url": ["new-github-release-url@2.0.0", "", { "dependencies": { "type-fest": "^2.5.1" } }, "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ=="], - "nitrogen": ["nitrogen@0.35.2", "", { "dependencies": { "chalk": "^5.3.0", "react-native-nitro-modules": "^0.35.2", "ts-morph": "^27.0.0", "yargs": "^18.0.0", "zod": "^4.0.5" }, "bin": { "nitrogen": "lib/index.js" } }, "sha512-oSlD1uoJPhTr4Zlf3IkX68zXBmpfuOzeds4LJBK7P7WUd1zE4fqAtYCHPeoKw2qLUByGV1FJTrr7Ye84dP/ujQ=="], + "nitrogen": ["nitrogen@0.35.5", "", { "dependencies": { "chalk": "^5.3.0", "react-native-nitro-modules": "^0.35.5", "ts-morph": "^27.0.0", "yargs": "^18.0.0", "zod": "^4.0.5" }, "bin": { "nitrogen": "lib/index.js" } }, "sha512-Ofl4aTW2rd44+hBcUwLXu01ViHikn2SDI7zOYc+6NcKSpnhoj42k1FwyvRj1QZPDMUT64Bwlb0DYw7Hrfd3BfQ=="], "nocache": ["nocache@3.0.4", "", {}, "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw=="], @@ -1409,7 +1409,7 @@ "react-native-nitro-image": ["react-native-nitro-image@workspace:packages/react-native-nitro-image"], - "react-native-nitro-modules": ["react-native-nitro-modules@0.35.2", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-97cZcCh3ZAuWAfutel2Q3qLfc45XXh7F9Ei5tEjahP0kV3q8hQelwLIulKXmjN+f0JI5Zf/wCsfwwdVWYU2tKA=="], + "react-native-nitro-modules": ["react-native-nitro-modules@0.35.5", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-aa03UzC5dLg5qFfyBkVK+JGSwHTjmK7jUZzyRz11r1Yk9C/nJTFe59EeHPxxNNTagkiwQTM6p3sySgD/TDRC7Q=="], "react-native-nitro-web-image": ["react-native-nitro-web-image@workspace:packages/react-native-nitro-web-image"], diff --git a/example/package.json b/example/package.json index bf6425e..3c23879 100644 --- a/example/package.json +++ b/example/package.json @@ -18,7 +18,7 @@ "react-native-fast-image": "^8.6.3", "react-native-nitro-image": "workspace:*", "react-native-nitro-web-image": "workspace:*", - "react-native-nitro-modules": "0.35.2", + "react-native-nitro-modules": "0.35.5", "react-native-safe-area-context": "^5.6.0", "react-native-screens": "^4.14.1" }, diff --git a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Color.kt b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Color.kt index 8d0ef74..8bd3a85 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Color.kt +++ b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Color.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.image import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -32,6 +33,24 @@ data class Color( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is Color) return false + return Objects.deepEquals(this.r, other.r) + && Objects.deepEquals(this.g, other.g) + && Objects.deepEquals(this.b, other.b) + && Objects.deepEquals(this.a, other.a) + } + + override fun hashCode(): Int { + return arrayOf( + r, + g, + b, + a + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/EncodedImageData.kt b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/EncodedImageData.kt index 8b34c57..b07a2cf 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/EncodedImageData.kt +++ b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/EncodedImageData.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.image import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects import com.margelo.nitro.core.ArrayBuffer /** @@ -32,6 +33,24 @@ data class EncodedImageData( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is EncodedImageData) return false + return Objects.deepEquals(this.buffer, other.buffer) + && Objects.deepEquals(this.width, other.width) + && Objects.deepEquals(this.height, other.height) + && Objects.deepEquals(this.imageFormat, other.imageFormat) + } + + override fun hashCode(): Int { + return arrayOf( + buffer, + width, + height, + imageFormat + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/RawPixelData.kt b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/RawPixelData.kt index e1f9a2a..1284ef2 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/RawPixelData.kt +++ b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/RawPixelData.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.image import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects import com.margelo.nitro.core.ArrayBuffer /** @@ -32,6 +33,24 @@ data class RawPixelData( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is RawPixelData) return false + return Objects.deepEquals(this.buffer, other.buffer) + && Objects.deepEquals(this.width, other.width) + && Objects.deepEquals(this.height, other.height) + && Objects.deepEquals(this.pixelFormat, other.pixelFormat) + } + + override fun hashCode(): Int { + return arrayOf( + buffer, + width, + height, + pixelFormat + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Variant_HybridImageSpec_HybridImageLoaderSpec.kt b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Variant_HybridImageSpec_HybridImageLoaderSpec.kt index d3d9c2a..bb35963 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Variant_HybridImageSpec_HybridImageLoaderSpec.kt +++ b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Variant_HybridImageSpec_HybridImageLoaderSpec.kt @@ -21,6 +21,22 @@ sealed class Variant_HybridImageSpec_HybridImageLoaderSpec { @DoNotStrip data class Second(@DoNotStrip val value: HybridImageLoaderSpec): Variant_HybridImageSpec_HybridImageLoaderSpec() + inline fun asType(): T? { + return when (this) { + is First -> (value) as? T + is Second -> (value) as? T + } + } + inline fun isType(): Boolean { + return asType() != null + } + inline fun match(first: (HybridImageSpec) -> R, second: (HybridImageLoaderSpec) -> R): R { + return when (this) { + is First -> first(value) + is Second -> second(value) + } + } + val isFirst: Boolean get() = this is First val isSecond: Boolean @@ -35,13 +51,6 @@ sealed class Variant_HybridImageSpec_HybridImageLoaderSpec { return value } - inline fun match(first: (HybridImageSpec) -> R, second: (HybridImageLoaderSpec) -> R): R { - return when (this) { - is First -> first(value) - is Second -> second(value) - } - } - companion object { @JvmStatic @DoNotStrip diff --git a/packages/react-native-nitro-image/nitrogen/generated/ios/NitroImage+autolinking.rb b/packages/react-native-nitro-image/nitrogen/generated/ios/NitroImage+autolinking.rb index 90cf305..06be8b7 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/ios/NitroImage+autolinking.rb +++ b/packages/react-native-nitro-image/nitrogen/generated/ios/NitroImage+autolinking.rb @@ -56,5 +56,7 @@ def add_nitrogen_files(spec) "SWIFT_OBJC_INTEROP_MODE" => "objcxx", # Enables stricter modular headers "DEFINES_MODULE" => "YES", + # Disable auto-generated ObjC header for Swift (Static linkage on Xcode 26.4 breaks here) + "SWIFT_INSTALL_OBJC_HEADER" => "NO", }) end diff --git a/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Variant__any_HybridImageSpec___any_HybridImageLoaderSpec_.swift b/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Variant__any_HybridImageSpec___any_HybridImageLoaderSpec_.swift index 63b54cd..1af8590 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Variant__any_HybridImageSpec___any_HybridImageLoaderSpec_.swift +++ b/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Variant__any_HybridImageSpec___any_HybridImageLoaderSpec_.swift @@ -16,3 +16,15 @@ public indirect enum Variant__any_HybridImageSpec___any_HybridImageLoaderSpec_ { case first((any HybridImageSpec)) case second((any HybridImageLoaderSpec)) } + +public extension Variant__any_HybridImageSpec___any_HybridImageLoaderSpec_ { + func asType(_ type: T.Type = T.self) -> T? { + switch self { + case .first(let value): return value as? T + case .second(let value): return value as? T + } + } + func isType(_ type: T.Type = T.self) -> Bool { + return self.asType(type) != nil + } +} diff --git a/packages/react-native-nitro-image/package.json b/packages/react-native-nitro-image/package.json index 8173143..3682a63 100644 --- a/packages/react-native-nitro-image/package.json +++ b/packages/react-native-nitro-image/package.json @@ -58,10 +58,10 @@ }, "devDependencies": { "@types/react": "^19.0.6", - "nitrogen": "0.35.2", + "nitrogen": "0.35.5", "react": "19.1.0", "react-native": "0.81.0", - "react-native-nitro-modules": "0.35.2", + "react-native-nitro-modules": "0.35.5", "typescript": "5.8.3" }, "peerDependencies": { diff --git a/packages/react-native-nitro-web-image/nitrogen/generated/android/kotlin/com/margelo/nitro/web/image/AsyncImageLoadOptions.kt b/packages/react-native-nitro-web-image/nitrogen/generated/android/kotlin/com/margelo/nitro/web/image/AsyncImageLoadOptions.kt index e0b2fdb..737c13c 100644 --- a/packages/react-native-nitro-web-image/nitrogen/generated/android/kotlin/com/margelo/nitro/web/image/AsyncImageLoadOptions.kt +++ b/packages/react-native-nitro-web-image/nitrogen/generated/android/kotlin/com/margelo/nitro/web/image/AsyncImageLoadOptions.kt @@ -9,6 +9,7 @@ package com.margelo.nitro.web.image import androidx.annotation.Keep import com.facebook.proguard.annotations.DoNotStrip +import java.util.Objects /** @@ -53,6 +54,38 @@ data class AsyncImageLoadOptions( ) { /* primary constructor */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is AsyncImageLoadOptions) return false + return Objects.deepEquals(this.priority, other.priority) + && Objects.deepEquals(this.forceRefresh, other.forceRefresh) + && Objects.deepEquals(this.cacheKey, other.cacheKey) + && Objects.deepEquals(this.continueInBackground, other.continueInBackground) + && Objects.deepEquals(this.allowInvalidSSLCertificates, other.allowInvalidSSLCertificates) + && Objects.deepEquals(this.scaleDownLargeImages, other.scaleDownLargeImages) + && Objects.deepEquals(this.queryMemoryDataSync, other.queryMemoryDataSync) + && Objects.deepEquals(this.queryDiskDataSync, other.queryDiskDataSync) + && Objects.deepEquals(this.decodeImage, other.decodeImage) + && Objects.deepEquals(this.allowHardware, other.allowHardware) + && Objects.deepEquals(this.progressive, other.progressive) + } + + override fun hashCode(): Int { + return arrayOf( + priority, + forceRefresh, + cacheKey, + continueInBackground, + allowInvalidSSLCertificates, + scaleDownLargeImages, + queryMemoryDataSync, + queryDiskDataSync, + decodeImage, + allowHardware, + progressive + ).contentDeepHashCode() + } + companion object { /** * Constructor called from C++ diff --git a/packages/react-native-nitro-web-image/nitrogen/generated/ios/NitroWebImage+autolinking.rb b/packages/react-native-nitro-web-image/nitrogen/generated/ios/NitroWebImage+autolinking.rb index 4c9ee8b..54895d6 100644 --- a/packages/react-native-nitro-web-image/nitrogen/generated/ios/NitroWebImage+autolinking.rb +++ b/packages/react-native-nitro-web-image/nitrogen/generated/ios/NitroWebImage+autolinking.rb @@ -56,5 +56,7 @@ def add_nitrogen_files(spec) "SWIFT_OBJC_INTEROP_MODE" => "objcxx", # Enables stricter modular headers "DEFINES_MODULE" => "YES", + # Disable auto-generated ObjC header for Swift (Static linkage on Xcode 26.4 breaks here) + "SWIFT_INSTALL_OBJC_HEADER" => "NO", }) end diff --git a/packages/react-native-nitro-web-image/package.json b/packages/react-native-nitro-web-image/package.json index 5aa5b0d..b396662 100644 --- a/packages/react-native-nitro-web-image/package.json +++ b/packages/react-native-nitro-web-image/package.json @@ -57,10 +57,10 @@ }, "devDependencies": { "@types/react": "^19.0.6", - "nitrogen": "0.35.2", + "nitrogen": "0.35.5", "react": "19.1.0", "react-native": "0.81.0", - "react-native-nitro-modules": "0.35.2", + "react-native-nitro-modules": "0.35.5", "typescript": "5.8.3" }, "peerDependencies": {