@onekeyfe/react-native-image 3.0.98

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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/OneKeyImage.podspec +32 -0
  3. package/README.md +88 -0
  4. package/android/CMakeLists.txt +12 -0
  5. package/android/build.gradle +85 -0
  6. package/android/consumer-rules.pro +10 -0
  7. package/android/gradle.properties +5 -0
  8. package/android/src/main/AndroidManifest.xml +1 -0
  9. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  10. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImage.kt +616 -0
  11. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageCache.kt +131 -0
  12. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageDecodeDimensions.kt +169 -0
  13. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageGlideRegistry.kt +285 -0
  14. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageModel.kt +68 -0
  15. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImagePackage.kt +28 -0
  16. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyImageSafety.kt +1120 -0
  17. package/android/src/main/java/com/margelo/nitro/onekeyimage/OneKeyTosUrl.kt +93 -0
  18. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyAnimationTimelineInspectorTest.kt +210 -0
  19. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageCacheTypeTest.kt +16 -0
  20. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageDecodeDimensionsTest.kt +70 -0
  21. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageModelTest.kt +65 -0
  22. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageRequestSignatureTest.kt +33 -0
  23. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyImageSafetyTest.kt +346 -0
  24. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyResourceCleanupTest.kt +43 -0
  25. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyTerminalEventPairTest.kt +38 -0
  26. package/android/src/test/java/com/margelo/nitro/onekeyimage/OneKeyTosUrlTest.kt +82 -0
  27. package/ios/OneKeyImage.swift +636 -0
  28. package/ios/OneKeyImageCache.swift +215 -0
  29. package/ios/OneKeyImageRequestContext.swift +781 -0
  30. package/ios/OneKeyTosURL.swift +69 -0
  31. package/ios/tests/OneKeyImageInfrastructureTests.swift +555 -0
  32. package/ios/tests/OneKeyTosURLTests.swift +142 -0
  33. package/lib/module/OneKeyImage.nitro.js +30 -0
  34. package/lib/module/index.js +223 -0
  35. package/lib/module/package.json +1 -0
  36. package/lib/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  37. package/lib/nitrogen/generated/android/c++/JFunc_void_double_double_OneKeyImageCacheType.hpp +77 -0
  38. package/lib/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
  39. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageCacheSpec.cpp +130 -0
  40. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageCacheSpec.hpp +66 -0
  41. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +255 -0
  42. package/lib/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +93 -0
  43. package/lib/nitrogen/generated/android/c++/JOneKeyImageCachePolicy.hpp +64 -0
  44. package/lib/nitrogen/generated/android/c++/JOneKeyImageCacheType.hpp +61 -0
  45. package/lib/nitrogen/generated/android/c++/JOneKeyImageContentFit.hpp +64 -0
  46. package/lib/nitrogen/generated/android/c++/JOneKeyImageLoadingStrategy.hpp +61 -0
  47. package/lib/nitrogen/generated/android/c++/JOneKeyImagePreloadSource.hpp +88 -0
  48. package/lib/nitrogen/generated/android/c++/JOneKeyImageVariant.hpp +64 -0
  49. package/lib/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +144 -0
  50. package/lib/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.hpp +54 -0
  51. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/Func_void.kt +78 -0
  52. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/Func_void_double_double_OneKeyImageCacheType.kt +78 -0
  53. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/Func_void_std__string.kt +78 -0
  54. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageCacheSpec.kt +69 -0
  55. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +189 -0
  56. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageCachePolicy.kt +25 -0
  57. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageCacheType.kt +24 -0
  58. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageContentFit.kt +25 -0
  59. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageLoadingStrategy.kt +24 -0
  60. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImagePreloadSource.kt +86 -0
  61. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageVariant.kt +25 -0
  62. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/onekeyimageOnLoad.kt +35 -0
  63. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/views/HybridOneKeyImageManager.kt +96 -0
  64. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/views/HybridOneKeyImageStateUpdater.kt +23 -0
  65. package/lib/nitrogen/generated/android/onekeyimage+autolinking.cmake +85 -0
  66. package/lib/nitrogen/generated/android/onekeyimage+autolinking.gradle +27 -0
  67. package/lib/nitrogen/generated/android/onekeyimageOnLoad.cpp +78 -0
  68. package/lib/nitrogen/generated/android/onekeyimageOnLoad.hpp +34 -0
  69. package/lib/nitrogen/generated/ios/OneKeyImage+autolinking.rb +62 -0
  70. package/lib/nitrogen/generated/ios/OneKeyImage-Swift-Cxx-Bridge.cpp +90 -0
  71. package/lib/nitrogen/generated/ios/OneKeyImage-Swift-Cxx-Bridge.hpp +405 -0
  72. package/lib/nitrogen/generated/ios/OneKeyImage-Swift-Cxx-Umbrella.hpp +71 -0
  73. package/lib/nitrogen/generated/ios/OneKeyImageAutolinking.mm +41 -0
  74. package/lib/nitrogen/generated/ios/OneKeyImageAutolinking.swift +38 -0
  75. package/lib/nitrogen/generated/ios/c++/HybridOneKeyImageCacheSpecSwift.cpp +11 -0
  76. package/lib/nitrogen/generated/ios/c++/HybridOneKeyImageCacheSpecSwift.hpp +114 -0
  77. package/lib/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.cpp +11 -0
  78. package/lib/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +206 -0
  79. package/lib/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +228 -0
  80. package/lib/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  81. package/lib/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  82. package/lib/nitrogen/generated/ios/swift/Func_void_double_double_OneKeyImageCacheType.swift +46 -0
  83. package/lib/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  84. package/lib/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  85. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageCacheSpec.swift +58 -0
  86. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageCacheSpec_cxx.swift +202 -0
  87. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +70 -0
  88. package/lib/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +539 -0
  89. package/lib/nitrogen/generated/ios/swift/OneKeyImageCachePolicy.swift +48 -0
  90. package/lib/nitrogen/generated/ios/swift/OneKeyImageCacheType.swift +44 -0
  91. package/lib/nitrogen/generated/ios/swift/OneKeyImageContentFit.swift +48 -0
  92. package/lib/nitrogen/generated/ios/swift/OneKeyImageLoadingStrategy.swift +44 -0
  93. package/lib/nitrogen/generated/ios/swift/OneKeyImagePreloadSource.swift +148 -0
  94. package/lib/nitrogen/generated/ios/swift/OneKeyImageVariant.swift +48 -0
  95. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageCacheSpec.cpp +24 -0
  96. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageCacheSpec.hpp +68 -0
  97. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +52 -0
  98. package/lib/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +108 -0
  99. package/lib/nitrogen/generated/shared/c++/OneKeyImageCachePolicy.hpp +84 -0
  100. package/lib/nitrogen/generated/shared/c++/OneKeyImageCacheType.hpp +80 -0
  101. package/lib/nitrogen/generated/shared/c++/OneKeyImageContentFit.hpp +84 -0
  102. package/lib/nitrogen/generated/shared/c++/OneKeyImageLoadingStrategy.hpp +80 -0
  103. package/lib/nitrogen/generated/shared/c++/OneKeyImagePreloadSource.hpp +114 -0
  104. package/lib/nitrogen/generated/shared/c++/OneKeyImageVariant.hpp +84 -0
  105. package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +62 -0
  106. package/lib/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +132 -0
  107. package/lib/nitrogen/generated/shared/json/OneKeyImageConfig.json +24 -0
  108. package/lib/typescript/package.json +1 -0
  109. package/lib/typescript/src/OneKeyImage.nitro.d.ts +67 -0
  110. package/lib/typescript/src/index.d.ts +55 -0
  111. package/nitro.json +31 -0
  112. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  113. package/nitrogen/generated/android/c++/JFunc_void_double_double_OneKeyImageCacheType.hpp +77 -0
  114. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
  115. package/nitrogen/generated/android/c++/JHybridOneKeyImageCacheSpec.cpp +130 -0
  116. package/nitrogen/generated/android/c++/JHybridOneKeyImageCacheSpec.hpp +66 -0
  117. package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.cpp +255 -0
  118. package/nitrogen/generated/android/c++/JHybridOneKeyImageSpec.hpp +93 -0
  119. package/nitrogen/generated/android/c++/JOneKeyImageCachePolicy.hpp +64 -0
  120. package/nitrogen/generated/android/c++/JOneKeyImageCacheType.hpp +61 -0
  121. package/nitrogen/generated/android/c++/JOneKeyImageContentFit.hpp +64 -0
  122. package/nitrogen/generated/android/c++/JOneKeyImageLoadingStrategy.hpp +61 -0
  123. package/nitrogen/generated/android/c++/JOneKeyImagePreloadSource.hpp +88 -0
  124. package/nitrogen/generated/android/c++/JOneKeyImageVariant.hpp +64 -0
  125. package/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.cpp +144 -0
  126. package/nitrogen/generated/android/c++/views/JHybridOneKeyImageStateUpdater.hpp +54 -0
  127. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/Func_void.kt +78 -0
  128. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/Func_void_double_double_OneKeyImageCacheType.kt +78 -0
  129. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/Func_void_std__string.kt +78 -0
  130. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageCacheSpec.kt +69 -0
  131. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/HybridOneKeyImageSpec.kt +189 -0
  132. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageCachePolicy.kt +25 -0
  133. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageCacheType.kt +24 -0
  134. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageContentFit.kt +25 -0
  135. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageLoadingStrategy.kt +24 -0
  136. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImagePreloadSource.kt +86 -0
  137. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/OneKeyImageVariant.kt +25 -0
  138. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/onekeyimageOnLoad.kt +35 -0
  139. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/views/HybridOneKeyImageManager.kt +96 -0
  140. package/nitrogen/generated/android/kotlin/com/margelo/nitro/onekeyimage/views/HybridOneKeyImageStateUpdater.kt +23 -0
  141. package/nitrogen/generated/android/onekeyimage+autolinking.cmake +85 -0
  142. package/nitrogen/generated/android/onekeyimage+autolinking.gradle +27 -0
  143. package/nitrogen/generated/android/onekeyimageOnLoad.cpp +78 -0
  144. package/nitrogen/generated/android/onekeyimageOnLoad.hpp +34 -0
  145. package/nitrogen/generated/ios/OneKeyImage+autolinking.rb +62 -0
  146. package/nitrogen/generated/ios/OneKeyImage-Swift-Cxx-Bridge.cpp +90 -0
  147. package/nitrogen/generated/ios/OneKeyImage-Swift-Cxx-Bridge.hpp +405 -0
  148. package/nitrogen/generated/ios/OneKeyImage-Swift-Cxx-Umbrella.hpp +71 -0
  149. package/nitrogen/generated/ios/OneKeyImageAutolinking.mm +41 -0
  150. package/nitrogen/generated/ios/OneKeyImageAutolinking.swift +38 -0
  151. package/nitrogen/generated/ios/c++/HybridOneKeyImageCacheSpecSwift.cpp +11 -0
  152. package/nitrogen/generated/ios/c++/HybridOneKeyImageCacheSpecSwift.hpp +114 -0
  153. package/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.cpp +11 -0
  154. package/nitrogen/generated/ios/c++/HybridOneKeyImageSpecSwift.hpp +206 -0
  155. package/nitrogen/generated/ios/c++/views/HybridOneKeyImageComponent.mm +228 -0
  156. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  157. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  158. package/nitrogen/generated/ios/swift/Func_void_double_double_OneKeyImageCacheType.swift +46 -0
  159. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  160. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  161. package/nitrogen/generated/ios/swift/HybridOneKeyImageCacheSpec.swift +58 -0
  162. package/nitrogen/generated/ios/swift/HybridOneKeyImageCacheSpec_cxx.swift +202 -0
  163. package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec.swift +70 -0
  164. package/nitrogen/generated/ios/swift/HybridOneKeyImageSpec_cxx.swift +539 -0
  165. package/nitrogen/generated/ios/swift/OneKeyImageCachePolicy.swift +48 -0
  166. package/nitrogen/generated/ios/swift/OneKeyImageCacheType.swift +44 -0
  167. package/nitrogen/generated/ios/swift/OneKeyImageContentFit.swift +48 -0
  168. package/nitrogen/generated/ios/swift/OneKeyImageLoadingStrategy.swift +44 -0
  169. package/nitrogen/generated/ios/swift/OneKeyImagePreloadSource.swift +148 -0
  170. package/nitrogen/generated/ios/swift/OneKeyImageVariant.swift +48 -0
  171. package/nitrogen/generated/shared/c++/HybridOneKeyImageCacheSpec.cpp +24 -0
  172. package/nitrogen/generated/shared/c++/HybridOneKeyImageCacheSpec.hpp +68 -0
  173. package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.cpp +52 -0
  174. package/nitrogen/generated/shared/c++/HybridOneKeyImageSpec.hpp +108 -0
  175. package/nitrogen/generated/shared/c++/OneKeyImageCachePolicy.hpp +84 -0
  176. package/nitrogen/generated/shared/c++/OneKeyImageCacheType.hpp +80 -0
  177. package/nitrogen/generated/shared/c++/OneKeyImageContentFit.hpp +84 -0
  178. package/nitrogen/generated/shared/c++/OneKeyImageLoadingStrategy.hpp +80 -0
  179. package/nitrogen/generated/shared/c++/OneKeyImagePreloadSource.hpp +114 -0
  180. package/nitrogen/generated/shared/c++/OneKeyImageVariant.hpp +84 -0
  181. package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.cpp +62 -0
  182. package/nitrogen/generated/shared/c++/views/HybridOneKeyImageComponent.hpp +132 -0
  183. package/nitrogen/generated/shared/json/OneKeyImageConfig.json +24 -0
  184. package/package.json +128 -0
  185. package/src/OneKeyImage.nitro.ts +86 -0
  186. package/src/index.tsx +376 -0
@@ -0,0 +1,142 @@
1
+ import XCTest
2
+
3
+ @testable import OneKeyImage
4
+
5
+ final class OneKeyTosURLTests: XCTestCase {
6
+ func testOptimizesAllowedOneKeyAssetURL() throws {
7
+ let raw = try XCTUnwrap(URL(string: "https://common.onekey-asset.com/tokens/btc.png"))
8
+ let result = OneKeyTosURL.optimized(
9
+ rawURL: raw,
10
+ displaySize: 100,
11
+ scale: 2,
12
+ overscan: 1.1,
13
+ hasCustomIdentity: false
14
+ )
15
+ XCTAssertTrue(result.absoluteString.contains("x-tos-process="))
16
+ XCTAssertTrue(result.absoluteString.contains("w_256"))
17
+ }
18
+
19
+ func testDoesNotRewriteSignedOrCustomIdentityURL() throws {
20
+ let signed = try XCTUnwrap(
21
+ URL(string: "https://common.onekey-asset.com/avatar.png?X-Tos-Signature=secret")
22
+ )
23
+ XCTAssertEqual(
24
+ OneKeyTosURL.optimized(
25
+ rawURL: signed,
26
+ displaySize: 100,
27
+ scale: 2,
28
+ overscan: 1.1,
29
+ hasCustomIdentity: false
30
+ ),
31
+ signed
32
+ )
33
+ let raw = try XCTUnwrap(URL(string: "https://common.onekey-asset.com/avatar.png"))
34
+ XCTAssertEqual(
35
+ OneKeyTosURL.optimized(
36
+ rawURL: raw,
37
+ displaySize: 100,
38
+ scale: 2,
39
+ overscan: 1.1,
40
+ hasCustomIdentity: true
41
+ ),
42
+ raw
43
+ )
44
+ }
45
+
46
+ func testDoesNotRewriteUntrustedHostOrUnsupportedMedia() throws {
47
+ for value in [
48
+ "https://example.com/avatar.png",
49
+ "https://web.onekey-asset.com/avatar.png",
50
+ "https://common.onekey-asset.com/icon.svg",
51
+ "https://common.onekey-asset.com/video.mp4",
52
+ "https://common.onekey-asset.com/video.webm",
53
+ "https://common.onekey-asset.com/video.m4v",
54
+ "https://common.onekey-asset.com/video.mov",
55
+ "https://common.onekey-asset.com/video.avi",
56
+ ] {
57
+ let raw = try XCTUnwrap(URL(string: value))
58
+ XCTAssertEqual(
59
+ OneKeyTosURL.optimized(
60
+ rawURL: raw,
61
+ displaySize: 100,
62
+ scale: 2,
63
+ overscan: 1.1,
64
+ hasCustomIdentity: false
65
+ ),
66
+ raw
67
+ )
68
+ }
69
+ }
70
+
71
+ func testUsesApprovedHostsBucketsAndCapsDPR() throws {
72
+ for host in [
73
+ "app-assets.onekey.so",
74
+ "uni.onekey-asset.com",
75
+ "uni-test.onekey-asset.com",
76
+ "common.onekey-asset.com",
77
+ "asset.onekey-asset.com",
78
+ ] {
79
+ let raw = try XCTUnwrap(URL(string: "https://\(host)/token.png"))
80
+ let result = OneKeyTosURL.optimized(
81
+ rawURL: raw,
82
+ displaySize: 100,
83
+ scale: 5,
84
+ overscan: 1.1,
85
+ hasCustomIdentity: false
86
+ )
87
+ XCTAssertTrue(result.absoluteString.contains("w_480"))
88
+ }
89
+ }
90
+
91
+ func testNormalizesNonFiniteSizingInputsWithoutCrashing() throws {
92
+ let raw = try XCTUnwrap(URL(string: "https://common.onekey-asset.com/token.png"))
93
+ let result = OneKeyTosURL.optimized(
94
+ rawURL: raw,
95
+ displaySize: 100,
96
+ scale: .nan,
97
+ overscan: .infinity,
98
+ hasCustomIdentity: false
99
+ )
100
+ XCTAssertTrue(result.absoluteString.contains("w_128"))
101
+ XCTAssertEqual(
102
+ OneKeyTosURL.optimized(
103
+ rawURL: raw,
104
+ displaySize: .infinity,
105
+ scale: 2,
106
+ overscan: 1.1,
107
+ hasCustomIdentity: false
108
+ ),
109
+ raw
110
+ )
111
+ let huge = OneKeyTosURL.optimized(
112
+ rawURL: raw,
113
+ displaySize: .greatestFiniteMagnitude,
114
+ scale: 3,
115
+ overscan: 1.1,
116
+ hasCustomIdentity: false
117
+ )
118
+ XCTAssertTrue(huge.absoluteString.contains("w_1280"))
119
+ }
120
+
121
+ func testSkipsEveryProtectedQueryFamily() throws {
122
+ for key in [
123
+ "expires", "policy", "signature", "token", "auth_key", "accesskeyid",
124
+ "ossaccesskeyid", "security-token", "x-amz-signature", "x-oss-signature",
125
+ "x-tos-process",
126
+ ] {
127
+ let raw = try XCTUnwrap(
128
+ URL(string: "https://common.onekey-asset.com/token.png?\(key)=value")
129
+ )
130
+ XCTAssertEqual(
131
+ OneKeyTosURL.optimized(
132
+ rawURL: raw,
133
+ displaySize: 100,
134
+ scale: 2,
135
+ overscan: 1.1,
136
+ hasCustomIdentity: false
137
+ ),
138
+ raw
139
+ )
140
+ }
141
+ }
142
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ export let OneKeyImageVariant = /*#__PURE__*/function (OneKeyImageVariant) {
4
+ OneKeyImageVariant["GENERIC"] = "generic";
5
+ OneKeyImageVariant["TOKEN"] = "token";
6
+ OneKeyImageVariant["NETWORK"] = "network";
7
+ OneKeyImageVariant["AVATAR"] = "avatar";
8
+ return OneKeyImageVariant;
9
+ }({});
10
+ export let OneKeyImageContentFit = /*#__PURE__*/function (OneKeyImageContentFit) {
11
+ OneKeyImageContentFit["COVER"] = "cover";
12
+ OneKeyImageContentFit["CONTAIN"] = "contain";
13
+ OneKeyImageContentFit["FILL"] = "fill";
14
+ OneKeyImageContentFit["CENTER"] = "center";
15
+ return OneKeyImageContentFit;
16
+ }({});
17
+ export let OneKeyImageCachePolicy = /*#__PURE__*/function (OneKeyImageCachePolicy) {
18
+ OneKeyImageCachePolicy["MEMORY_DISK"] = "memory-disk";
19
+ OneKeyImageCachePolicy["MEMORY"] = "memory";
20
+ OneKeyImageCachePolicy["DISK"] = "disk";
21
+ OneKeyImageCachePolicy["NONE"] = "none";
22
+ return OneKeyImageCachePolicy;
23
+ }({});
24
+ export let OneKeyImageLoadingStrategy = /*#__PURE__*/function (OneKeyImageLoadingStrategy) {
25
+ OneKeyImageLoadingStrategy["STATIC"] = "static";
26
+ OneKeyImageLoadingStrategy["SKELETON"] = "skeleton";
27
+ OneKeyImageLoadingStrategy["NONE"] = "none";
28
+ return OneKeyImageLoadingStrategy;
29
+ }({});
30
+ //# sourceMappingURL=OneKeyImage.nitro.js.map
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+
3
+ import { createElement, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { Image, Platform, StyleSheet, View } from 'react-native';
5
+ import { callback, getHostComponent, NitroModules } from 'react-native-nitro-modules';
6
+ const OneKeyImageConfig = require('../nitrogen/generated/shared/json/OneKeyImageConfig.json');
7
+ import { OneKeyImageCachePolicy, OneKeyImageContentFit, OneKeyImageLoadingStrategy, OneKeyImageVariant } from "./OneKeyImage.nitro.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ export { OneKeyImageCachePolicy, OneKeyImageContentFit, OneKeyImageLoadingStrategy, OneKeyImageVariant };
10
+ export let OneKeyImageCacheType = /*#__PURE__*/function (OneKeyImageCacheType) {
11
+ OneKeyImageCacheType["NONE"] = "none";
12
+ OneKeyImageCacheType["MEMORY"] = "memory";
13
+ OneKeyImageCacheType["DISK"] = "disk";
14
+ return OneKeyImageCacheType;
15
+ }({});
16
+ const NativeOneKeyImage = getHostComponent('OneKeyImage', () => OneKeyImageConfig);
17
+ const nativeCache = NitroModules.createHybridObject('OneKeyImageCache');
18
+ function unwrap(value) {
19
+ return typeof value === 'function' ? value : value?.f;
20
+ }
21
+ function normalizeSource(source) {
22
+ if (source == null) return undefined;
23
+ const resolved = Image.resolveAssetSource(source);
24
+ if (resolved?.uri) {
25
+ const original = typeof source === 'object' && !Array.isArray(source) ? source : undefined;
26
+ return {
27
+ uri: resolved.uri,
28
+ width: resolved.width,
29
+ height: resolved.height,
30
+ scale: resolved.scale,
31
+ headers: original?.headers,
32
+ cachePolicy: original?.cachePolicy
33
+ };
34
+ }
35
+ return undefined;
36
+ }
37
+ export function OneKeyImage({
38
+ source,
39
+ placeholder,
40
+ fallback,
41
+ variant = OneKeyImageVariant.GENERIC,
42
+ contentFit = OneKeyImageContentFit.COVER,
43
+ cachePolicy,
44
+ autoplay,
45
+ recyclingKey,
46
+ optimizeTos = true,
47
+ overscan = 1.1,
48
+ loadingStrategy = OneKeyImageLoadingStrategy.STATIC,
49
+ hybridRef,
50
+ onLoadStart,
51
+ onLoad,
52
+ onDisplay,
53
+ onError,
54
+ onLoadEnd,
55
+ style,
56
+ ...viewProps
57
+ }) {
58
+ const normalized = useMemo(() => normalizeSource(source), [source]);
59
+ const resolvedCachePolicy = cachePolicy ?? normalized?.cachePolicy ?? OneKeyImageCachePolicy.MEMORY_DISK;
60
+ const identity = `${normalized?.uri ?? ''}|${JSON.stringify(normalized?.headers ?? {})}|${resolvedCachePolicy}|${recyclingKey ?? ''}|${contentFit}|${optimizeTos ? '1' : '0'}|${overscan}`;
61
+ const hasSource = normalized != null;
62
+ const hasOverlay = placeholder != null || fallback != null;
63
+ const [loadState, setLoadState] = useState({
64
+ identity,
65
+ status: hasSource ? 'loading' : 'fallback'
66
+ });
67
+ const effectiveState = loadState.identity === identity ? loadState.status : hasSource ? 'loading' : 'fallback';
68
+ const refs = useRef({
69
+ hybridRef: unwrap(hybridRef),
70
+ onLoadStart: unwrap(onLoadStart),
71
+ onLoad: unwrap(onLoad),
72
+ onDisplay: unwrap(onDisplay),
73
+ onError: unwrap(onError),
74
+ onLoadEnd: unwrap(onLoadEnd)
75
+ });
76
+ refs.current = {
77
+ hybridRef: unwrap(hybridRef),
78
+ onLoadStart: unwrap(onLoadStart),
79
+ onLoad: unwrap(onLoad),
80
+ onDisplay: unwrap(onDisplay),
81
+ onError: unwrap(onError),
82
+ onLoadEnd: unwrap(onLoadEnd)
83
+ };
84
+ const nativeMethodsRef = useRef(null);
85
+ const pendingOverlayReloadRef = useRef(null);
86
+ const previousRenderRef = useRef({
87
+ hasOverlay,
88
+ identity
89
+ });
90
+ useEffect(() => {
91
+ const previous = previousRenderRef.current;
92
+ const identityChanged = previous.identity !== identity;
93
+ if (hasOverlay && (!previous.hasOverlay || identityChanged)) {
94
+ const status = hasSource ? 'loading' : 'fallback';
95
+ setLoadState({
96
+ identity,
97
+ status
98
+ });
99
+ }
100
+ if (hasOverlay && !previous.hasOverlay && !identityChanged && hasSource) {
101
+ pendingOverlayReloadRef.current = identity;
102
+ const nativeMethods = nativeMethodsRef.current;
103
+ if (nativeMethods != null) {
104
+ pendingOverlayReloadRef.current = null;
105
+ nativeMethods.reload();
106
+ }
107
+ } else if (!hasOverlay || identityChanged) {
108
+ pendingOverlayReloadRef.current = null;
109
+ }
110
+ previousRenderRef.current = {
111
+ hasOverlay,
112
+ identity
113
+ };
114
+ }, [hasOverlay, hasSource, identity]);
115
+ const needsHybridRef = hasOverlay || refs.current.hybridRef != null;
116
+ const needsLoadStart = hasOverlay || refs.current.onLoadStart != null;
117
+ const needsLoad = refs.current.onLoad != null;
118
+ const needsDisplay = placeholder != null || refs.current.onDisplay != null;
119
+ const needsError = hasOverlay || refs.current.onError != null;
120
+ const needsLoadEnd = refs.current.onLoadEnd != null;
121
+ const nativeCallbacks = useMemo(() => ({
122
+ hybridRef: needsHybridRef ? callback(ref => {
123
+ nativeMethodsRef.current = ref;
124
+ if (pendingOverlayReloadRef.current === identity) {
125
+ pendingOverlayReloadRef.current = null;
126
+ ref.reload();
127
+ }
128
+ refs.current.hybridRef?.(ref);
129
+ }) : undefined,
130
+ onLoadStart: needsLoadStart ? callback(() => {
131
+ if (hasOverlay) {
132
+ setLoadState({
133
+ identity,
134
+ status: 'loading'
135
+ });
136
+ }
137
+ refs.current.onLoadStart?.();
138
+ }) : undefined,
139
+ onLoad: needsLoad ? callback((width, height, cacheType) => {
140
+ refs.current.onLoad?.({
141
+ source: {
142
+ url: normalized?.uri ?? '',
143
+ width,
144
+ height
145
+ },
146
+ cacheType: cacheType
147
+ });
148
+ }) : undefined,
149
+ onDisplay: needsDisplay ? callback(() => {
150
+ if (placeholder != null) {
151
+ setLoadState({
152
+ identity,
153
+ status: 'loaded'
154
+ });
155
+ }
156
+ refs.current.onDisplay?.();
157
+ }) : undefined,
158
+ onError: needsError ? callback(message => {
159
+ if (hasOverlay) {
160
+ setLoadState({
161
+ identity,
162
+ status: 'fallback'
163
+ });
164
+ }
165
+ refs.current.onError?.({
166
+ error: message
167
+ });
168
+ }) : undefined,
169
+ onLoadEnd: needsLoadEnd ? callback(() => refs.current.onLoadEnd?.()) : undefined
170
+ }), [hasOverlay, identity, needsDisplay, needsError, needsHybridRef, needsLoad, needsLoadEnd, needsLoadStart, normalized?.uri, placeholder]);
171
+ const native = /*#__PURE__*/createElement(NativeOneKeyImage, {
172
+ ...viewProps,
173
+ ...nativeCallbacks,
174
+ style: hasOverlay ? StyleSheet.absoluteFill : style,
175
+ sourceUri: normalized?.uri,
176
+ sourceHeadersJson: normalized?.headers ? JSON.stringify(normalized.headers) : undefined,
177
+ variant,
178
+ contentFit,
179
+ cachePolicy: resolvedCachePolicy,
180
+ autoplay: autoplay ?? Platform.OS !== 'android',
181
+ recyclingKey,
182
+ optimizeTos,
183
+ overscan,
184
+ loadingStrategy: placeholder == null ? loadingStrategy : OneKeyImageLoadingStrategy.NONE
185
+ });
186
+ if (!hasOverlay) return native;
187
+ return /*#__PURE__*/_jsxs(View, {
188
+ style: [style, styles.overlayContainer],
189
+ collapsable: false,
190
+ children: [native, effectiveState === 'loading' && placeholder != null ? /*#__PURE__*/_jsx(View, {
191
+ pointerEvents: "none",
192
+ style: StyleSheet.absoluteFill,
193
+ children: placeholder
194
+ }) : null, effectiveState === 'fallback' && fallback != null ? /*#__PURE__*/_jsx(View, {
195
+ pointerEvents: "none",
196
+ style: StyleSheet.absoluteFill,
197
+ children: fallback
198
+ }) : null]
199
+ });
200
+ }
201
+ export const OneKeyImageCache = {
202
+ preload(sources) {
203
+ return nativeCache.preload(sources.filter(source => Boolean(source.uri)).map(source => ({
204
+ uri: source.uri,
205
+ headersJson: source.headers ? JSON.stringify(source.headers) : undefined,
206
+ cachePolicy: source.cachePolicy ?? OneKeyImageCachePolicy.MEMORY_DISK,
207
+ resizeWidth: source.resizeWidth,
208
+ resizeHeight: source.resizeHeight,
209
+ pixelRatio: source.pixelRatio,
210
+ overscan: source.overscan,
211
+ optimizeTos: source.optimizeTos
212
+ })));
213
+ },
214
+ clearMemory: () => nativeCache.clearMemory(),
215
+ clearDisk: () => nativeCache.clearDisk(),
216
+ clearAll: () => nativeCache.clearAll()
217
+ };
218
+ const styles = StyleSheet.create({
219
+ overlayContainer: {
220
+ overflow: 'hidden'
221
+ }
222
+ });
223
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,75 @@
1
+ ///
2
+ /// JFunc_void.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include <functional>
14
+ #include <NitroModules/JNICallable.hpp>
15
+
16
+ namespace margelo::nitro::onekeyimage {
17
+
18
+ using namespace facebook;
19
+
20
+ /**
21
+ * Represents the Java/Kotlin callback `() -> Unit`.
22
+ * This can be passed around between C++ and Java/Kotlin.
23
+ */
24
+ struct JFunc_void: public jni::JavaClass<JFunc_void> {
25
+ public:
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/onekeyimage/Func_void;";
27
+
28
+ public:
29
+ /**
30
+ * Invokes the function this `JFunc_void` instance holds through JNI.
31
+ */
32
+ void invoke() const {
33
+ static const auto method = javaClassStatic()->getMethod<void()>("invoke");
34
+ method(self());
35
+ }
36
+ };
37
+
38
+ /**
39
+ * An implementation of Func_void that is backed by a C++ implementation (using `std::function<...>`)
40
+ */
41
+ class JFunc_void_cxx final: public jni::HybridClass<JFunc_void_cxx, JFunc_void> {
42
+ public:
43
+ static jni::local_ref<JFunc_void::javaobject> fromCpp(const std::function<void()>& func) {
44
+ return JFunc_void_cxx::newObjectCxxArgs(func);
45
+ }
46
+
47
+ public:
48
+ /**
49
+ * Invokes the C++ `std::function<...>` this `JFunc_void_cxx` instance holds.
50
+ */
51
+ void invoke_cxx() {
52
+ _func();
53
+ }
54
+
55
+ public:
56
+ [[nodiscard]]
57
+ inline const std::function<void()>& getFunction() const {
58
+ return _func;
59
+ }
60
+
61
+ public:
62
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/onekeyimage/Func_void_cxx;";
63
+ static void registerNatives() {
64
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_cxx::invoke_cxx)});
65
+ }
66
+
67
+ private:
68
+ explicit JFunc_void_cxx(const std::function<void()>& func): _func(func) { }
69
+
70
+ private:
71
+ friend HybridBase;
72
+ std::function<void()> _func;
73
+ };
74
+
75
+ } // namespace margelo::nitro::onekeyimage
@@ -0,0 +1,77 @@
1
+ ///
2
+ /// JFunc_void_double_double_OneKeyImageCacheType.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include "OneKeyImageCacheType.hpp"
14
+ #include <functional>
15
+ #include <NitroModules/JNICallable.hpp>
16
+ #include "JOneKeyImageCacheType.hpp"
17
+
18
+ namespace margelo::nitro::onekeyimage {
19
+
20
+ using namespace facebook;
21
+
22
+ /**
23
+ * Represents the Java/Kotlin callback `(width: Double, height: Double, cacheType: OneKeyImageCacheType) -> Unit`.
24
+ * This can be passed around between C++ and Java/Kotlin.
25
+ */
26
+ struct JFunc_void_double_double_OneKeyImageCacheType: public jni::JavaClass<JFunc_void_double_double_OneKeyImageCacheType> {
27
+ public:
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/onekeyimage/Func_void_double_double_OneKeyImageCacheType;";
29
+
30
+ public:
31
+ /**
32
+ * Invokes the function this `JFunc_void_double_double_OneKeyImageCacheType` instance holds through JNI.
33
+ */
34
+ void invoke(double width, double height, OneKeyImageCacheType cacheType) const {
35
+ static const auto method = javaClassStatic()->getMethod<void(double /* width */, double /* height */, jni::alias_ref<JOneKeyImageCacheType> /* cacheType */)>("invoke");
36
+ method(self(), width, height, JOneKeyImageCacheType::fromCpp(cacheType));
37
+ }
38
+ };
39
+
40
+ /**
41
+ * An implementation of Func_void_double_double_OneKeyImageCacheType that is backed by a C++ implementation (using `std::function<...>`)
42
+ */
43
+ class JFunc_void_double_double_OneKeyImageCacheType_cxx final: public jni::HybridClass<JFunc_void_double_double_OneKeyImageCacheType_cxx, JFunc_void_double_double_OneKeyImageCacheType> {
44
+ public:
45
+ static jni::local_ref<JFunc_void_double_double_OneKeyImageCacheType::javaobject> fromCpp(const std::function<void(double /* width */, double /* height */, OneKeyImageCacheType /* cacheType */)>& func) {
46
+ return JFunc_void_double_double_OneKeyImageCacheType_cxx::newObjectCxxArgs(func);
47
+ }
48
+
49
+ public:
50
+ /**
51
+ * Invokes the C++ `std::function<...>` this `JFunc_void_double_double_OneKeyImageCacheType_cxx` instance holds.
52
+ */
53
+ void invoke_cxx(double width, double height, jni::alias_ref<JOneKeyImageCacheType> cacheType) {
54
+ _func(width, height, cacheType->toCpp());
55
+ }
56
+
57
+ public:
58
+ [[nodiscard]]
59
+ inline const std::function<void(double /* width */, double /* height */, OneKeyImageCacheType /* cacheType */)>& getFunction() const {
60
+ return _func;
61
+ }
62
+
63
+ public:
64
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/onekeyimage/Func_void_double_double_OneKeyImageCacheType_cxx;";
65
+ static void registerNatives() {
66
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_double_double_OneKeyImageCacheType_cxx::invoke_cxx)});
67
+ }
68
+
69
+ private:
70
+ explicit JFunc_void_double_double_OneKeyImageCacheType_cxx(const std::function<void(double /* width */, double /* height */, OneKeyImageCacheType /* cacheType */)>& func): _func(func) { }
71
+
72
+ private:
73
+ friend HybridBase;
74
+ std::function<void(double /* width */, double /* height */, OneKeyImageCacheType /* cacheType */)> _func;
75
+ };
76
+
77
+ } // namespace margelo::nitro::onekeyimage
@@ -0,0 +1,76 @@
1
+ ///
2
+ /// JFunc_void_std__string.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include <string>
14
+ #include <functional>
15
+ #include <NitroModules/JNICallable.hpp>
16
+
17
+ namespace margelo::nitro::onekeyimage {
18
+
19
+ using namespace facebook;
20
+
21
+ /**
22
+ * Represents the Java/Kotlin callback `(message: String) -> Unit`.
23
+ * This can be passed around between C++ and Java/Kotlin.
24
+ */
25
+ struct JFunc_void_std__string: public jni::JavaClass<JFunc_void_std__string> {
26
+ public:
27
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/onekeyimage/Func_void_std__string;";
28
+
29
+ public:
30
+ /**
31
+ * Invokes the function this `JFunc_void_std__string` instance holds through JNI.
32
+ */
33
+ void invoke(const std::string& message) const {
34
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* message */)>("invoke");
35
+ method(self(), jni::make_jstring(message));
36
+ }
37
+ };
38
+
39
+ /**
40
+ * An implementation of Func_void_std__string that is backed by a C++ implementation (using `std::function<...>`)
41
+ */
42
+ class JFunc_void_std__string_cxx final: public jni::HybridClass<JFunc_void_std__string_cxx, JFunc_void_std__string> {
43
+ public:
44
+ static jni::local_ref<JFunc_void_std__string::javaobject> fromCpp(const std::function<void(const std::string& /* message */)>& func) {
45
+ return JFunc_void_std__string_cxx::newObjectCxxArgs(func);
46
+ }
47
+
48
+ public:
49
+ /**
50
+ * Invokes the C++ `std::function<...>` this `JFunc_void_std__string_cxx` instance holds.
51
+ */
52
+ void invoke_cxx(jni::alias_ref<jni::JString> message) {
53
+ _func(message->toStdString());
54
+ }
55
+
56
+ public:
57
+ [[nodiscard]]
58
+ inline const std::function<void(const std::string& /* message */)>& getFunction() const {
59
+ return _func;
60
+ }
61
+
62
+ public:
63
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/onekeyimage/Func_void_std__string_cxx;";
64
+ static void registerNatives() {
65
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__string_cxx::invoke_cxx)});
66
+ }
67
+
68
+ private:
69
+ explicit JFunc_void_std__string_cxx(const std::function<void(const std::string& /* message */)>& func): _func(func) { }
70
+
71
+ private:
72
+ friend HybridBase;
73
+ std::function<void(const std::string& /* message */)> _func;
74
+ };
75
+
76
+ } // namespace margelo::nitro::onekeyimage