react-native-nitro-version-check 1.1.1 → 2.0.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 CHANGED
@@ -38,6 +38,8 @@ if (await VersionCheck.needsUpdate()) {
38
38
  bun add react-native-nitro-version-check
39
39
  ```
40
40
 
41
+ > **Version 2.x and newer requires Nitro 0.35+** — for earlier versions, use version 1.x
42
+ >
41
43
  > Check the [full installation guide](https://alshehriali0.github.io/react-native-nitro-version-check/docs/installation) for platform setup and additional dependencies.
42
44
 
43
45
  ## Documentation
@@ -45,6 +47,7 @@ bun add react-native-nitro-version-check
45
47
  - [**Nitro Version Check** docs 📚](https://alshehriali0.github.io/react-native-nitro-version-check/)
46
48
  - [**Getting Started** guide](https://alshehriali0.github.io/react-native-nitro-version-check/docs/getting-started)
47
49
  - [**Installation** guide](https://alshehriali0.github.io/react-native-nitro-version-check/docs/installation)
50
+ - [**Compatibility** guide](https://alshehriali0.github.io/react-native-nitro-version-check/docs/compatibility)
48
51
  - [**API Reference**](https://alshehriali0.github.io/react-native-nitro-version-check/docs/api-reference)
49
52
  - [**Migration Guide** from react-native-version-check](https://alshehriali0.github.io/react-native-nitro-version-check/docs/migration-guide)
50
53
 
@@ -26,20 +26,27 @@ int initialize(JavaVM* vm) {
26
26
  });
27
27
  }
28
28
 
29
+ struct JHybridVersionCheckSpecImpl: public jni::JavaClass<JHybridVersionCheckSpecImpl, JHybridVersionCheckSpec::JavaPart> {
30
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroversioncheck/HybridVersionCheck;";
31
+ static std::shared_ptr<JHybridVersionCheckSpec> create() {
32
+ static auto constructorFn = javaClassStatic()->getConstructor<JHybridVersionCheckSpecImpl::javaobject()>();
33
+ jni::local_ref<JHybridVersionCheckSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
34
+ return javaPart->getJHybridVersionCheckSpec();
35
+ }
36
+ };
37
+
29
38
  void registerAllNatives() {
30
39
  using namespace margelo::nitro;
31
40
  using namespace margelo::nitro::nitroversioncheck;
32
41
 
33
42
  // Register native JNI methods
34
- margelo::nitro::nitroversioncheck::JHybridVersionCheckSpec::registerNatives();
43
+ margelo::nitro::nitroversioncheck::JHybridVersionCheckSpec::CxxPart::registerNatives();
35
44
 
36
45
  // Register Nitro Hybrid Objects
37
46
  HybridObjectRegistry::registerHybridObjectConstructor(
38
47
  "VersionCheck",
39
48
  []() -> std::shared_ptr<HybridObject> {
40
- static DefaultConstructableObject<JHybridVersionCheckSpec::javaobject> object("com/margelo/nitro/nitroversioncheck/HybridVersionCheck");
41
- auto instance = object.create();
42
- return instance->cthis()->shared();
49
+ return JHybridVersionCheckSpecImpl::create();
43
50
  }
44
51
  );
45
52
  }
@@ -16,69 +16,63 @@
16
16
 
17
17
  namespace margelo::nitro::nitroversioncheck {
18
18
 
19
- jni::local_ref<JHybridVersionCheckSpec::jhybriddata> JHybridVersionCheckSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
20
- return makeCxxInstance(jThis);
21
- }
22
-
23
- void JHybridVersionCheckSpec::registerNatives() {
24
- registerHybrid({
25
- makeNativeMethod("initHybrid", JHybridVersionCheckSpec::initHybrid),
26
- });
19
+ std::shared_ptr<JHybridVersionCheckSpec> JHybridVersionCheckSpec::JavaPart::getJHybridVersionCheckSpec() {
20
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
21
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridVersionCheckSpec>(hybridObject);
22
+ if (castHybridObject == nullptr) [[unlikely]] {
23
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridVersionCheckSpec!");
24
+ }
25
+ return castHybridObject;
27
26
  }
28
27
 
29
- size_t JHybridVersionCheckSpec::getExternalMemorySize() noexcept {
30
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
31
- return method(_javaPart);
28
+ jni::local_ref<JHybridVersionCheckSpec::CxxPart::jhybriddata> JHybridVersionCheckSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
29
+ return makeCxxInstance(jThis);
32
30
  }
33
31
 
34
- bool JHybridVersionCheckSpec::equals(const std::shared_ptr<HybridObject>& other) {
35
- if (auto otherCast = std::dynamic_pointer_cast<JHybridVersionCheckSpec>(other)) {
36
- return _javaPart == otherCast->_javaPart;
32
+ std::shared_ptr<JHybridObject> JHybridVersionCheckSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
33
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridVersionCheckSpec::JavaPart>(javaPart);
34
+ if (castJavaPart == nullptr) [[unlikely]] {
35
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridVersionCheckSpec::JavaPart!");
37
36
  }
38
- return false;
39
- }
40
-
41
- void JHybridVersionCheckSpec::dispose() noexcept {
42
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
43
- method(_javaPart);
37
+ return std::make_shared<JHybridVersionCheckSpec>(castJavaPart);
44
38
  }
45
39
 
46
- std::string JHybridVersionCheckSpec::toString() {
47
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
48
- auto javaString = method(_javaPart);
49
- return javaString->toStdString();
40
+ void JHybridVersionCheckSpec::CxxPart::registerNatives() {
41
+ registerHybrid({
42
+ makeNativeMethod("initHybrid", JHybridVersionCheckSpec::CxxPart::initHybrid),
43
+ });
50
44
  }
51
45
 
52
46
  // Properties
53
47
  std::string JHybridVersionCheckSpec::getVersion() {
54
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getVersion");
48
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getVersion");
55
49
  auto __result = method(_javaPart);
56
50
  return __result->toStdString();
57
51
  }
58
52
  std::string JHybridVersionCheckSpec::getBuildNumber() {
59
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getBuildNumber");
53
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getBuildNumber");
60
54
  auto __result = method(_javaPart);
61
55
  return __result->toStdString();
62
56
  }
63
57
  std::string JHybridVersionCheckSpec::getPackageName() {
64
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getPackageName");
58
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getPackageName");
65
59
  auto __result = method(_javaPart);
66
60
  return __result->toStdString();
67
61
  }
68
62
  std::optional<std::string> JHybridVersionCheckSpec::getInstallSource() {
69
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getInstallSource");
63
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getInstallSource");
70
64
  auto __result = method(_javaPart);
71
65
  return __result != nullptr ? std::make_optional(__result->toStdString()) : std::nullopt;
72
66
  }
73
67
 
74
68
  // Methods
75
69
  std::string JHybridVersionCheckSpec::getCountry() {
76
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getCountry");
70
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getCountry");
77
71
  auto __result = method(_javaPart);
78
72
  return __result->toStdString();
79
73
  }
80
74
  std::shared_ptr<Promise<std::string>> JHybridVersionCheckSpec::getStoreUrl(const std::optional<std::string>& countryCode) {
81
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* countryCode */)>("getStoreUrl");
75
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* countryCode */)>("getStoreUrl");
82
76
  auto __result = method(_javaPart, countryCode.has_value() ? jni::make_jstring(countryCode.value()) : nullptr);
83
77
  return [&]() {
84
78
  auto __promise = Promise<std::string>::create();
@@ -94,7 +88,7 @@ namespace margelo::nitro::nitroversioncheck {
94
88
  }();
95
89
  }
96
90
  std::shared_ptr<Promise<std::string>> JHybridVersionCheckSpec::getLatestVersion(const std::optional<std::string>& countryCode) {
97
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* countryCode */)>("getLatestVersion");
91
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* countryCode */)>("getLatestVersion");
98
92
  auto __result = method(_javaPart, countryCode.has_value() ? jni::make_jstring(countryCode.value()) : nullptr);
99
93
  return [&]() {
100
94
  auto __promise = Promise<std::string>::create();
@@ -110,7 +104,7 @@ namespace margelo::nitro::nitroversioncheck {
110
104
  }();
111
105
  }
112
106
  std::shared_ptr<Promise<bool>> JHybridVersionCheckSpec::needsUpdate() {
113
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("needsUpdate");
107
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("needsUpdate");
114
108
  auto __result = method(_javaPart);
115
109
  return [&]() {
116
110
  auto __promise = Promise<bool>::create();
@@ -18,34 +18,33 @@ namespace margelo::nitro::nitroversioncheck {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridVersionCheckSpec: public jni::HybridClass<JHybridVersionCheckSpec, JHybridObject>,
22
- public virtual HybridVersionCheckSpec {
21
+ class JHybridVersionCheckSpec: public virtual HybridVersionCheckSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroversioncheck/HybridVersionCheckSpec;";
25
- static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
26
- static void registerNatives();
27
-
28
- protected:
29
- // C++ constructor (called from Java via `initHybrid()`)
30
- explicit JHybridVersionCheckSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridVersionCheckSpec::TAG),
32
- HybridBase(jThis),
33
- _javaPart(jni::make_global(jThis)) {}
23
+ struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroversioncheck/HybridVersionCheckSpec;";
25
+ std::shared_ptr<JHybridVersionCheckSpec> getJHybridVersionCheckSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitroversioncheck/HybridVersionCheckSpec$CxxPart;";
29
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
30
+ static void registerNatives();
31
+ using HybridBase::HybridBase;
32
+ protected:
33
+ std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
34
+ };
34
35
 
35
36
  public:
37
+ explicit JHybridVersionCheckSpec(const jni::local_ref<JHybridVersionCheckSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridVersionCheckSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridVersionCheckSpec() override {
37
42
  // Hermes GC can destroy JS objects on a non-JNI Thread.
38
43
  jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
39
44
  }
40
45
 
41
46
  public:
42
- size_t getExternalMemorySize() noexcept override;
43
- bool equals(const std::shared_ptr<HybridObject>& other) override;
44
- void dispose() noexcept override;
45
- std::string toString() override;
46
-
47
- public:
48
- inline const jni::global_ref<JHybridVersionCheckSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridVersionCheckSpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -64,9 +63,7 @@ namespace margelo::nitro::nitroversioncheck {
64
63
  std::shared_ptr<Promise<bool>> needsUpdate() override;
65
64
 
66
65
  private:
67
- friend HybridBase;
68
- using HybridBase::HybridBase;
69
- jni::global_ref<JHybridVersionCheckSpec::javaobject> _javaPart;
66
+ jni::global_ref<JHybridVersionCheckSpec::JavaPart> _javaPart;
70
67
  };
71
68
 
72
69
  } // namespace margelo::nitro::nitroversioncheck
@@ -25,23 +25,6 @@ import com.margelo.nitro.core.HybridObject
25
25
  "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
26
26
  )
27
27
  abstract class HybridVersionCheckSpec: HybridObject() {
28
- @DoNotStrip
29
- private var mHybridData: HybridData = initHybrid()
30
-
31
- init {
32
- super.updateNative(mHybridData)
33
- }
34
-
35
- override fun updateNative(hybridData: HybridData) {
36
- mHybridData = hybridData
37
- super.updateNative(hybridData)
38
- }
39
-
40
- // Default implementation of `HybridObject.toString()`
41
- override fun toString(): String {
42
- return "[HybridObject VersionCheck]"
43
- }
44
-
45
28
  // Properties
46
29
  @get:DoNotStrip
47
30
  @get:Keep
@@ -76,7 +59,21 @@ abstract class HybridVersionCheckSpec: HybridObject() {
76
59
  @Keep
77
60
  abstract fun needsUpdate(): Promise<Boolean>
78
61
 
79
- private external fun initHybrid(): HybridData
62
+ // Default implementation of `HybridObject.toString()`
63
+ override fun toString(): String {
64
+ return "[HybridObject VersionCheck]"
65
+ }
66
+
67
+ // C++ backing class
68
+ @DoNotStrip
69
+ @Keep
70
+ protected open class CxxPart(javaPart: HybridVersionCheckSpec): HybridObject.CxxPart(javaPart) {
71
+ // C++ JHybridVersionCheckSpec::CxxPart::initHybrid(...)
72
+ external override fun initHybrid(): HybridData
73
+ }
74
+ override fun createCxxPart(): CxxPart {
75
+ return CxxPart(this)
76
+ }
80
77
 
81
78
  companion object {
82
79
  protected const val TAG = "HybridVersionCheckSpec"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-version-check",
3
- "version": "1.1.1",
3
+ "version": "2.0.1",
4
4
  "description": "A lightweight, fast version-checking library for React Native, powered by Nitro Modules",
5
5
  "main": "lib/index",
6
6
  "module": "lib/index",
@@ -155,7 +155,7 @@
155
155
  "@types/jest": "^29.5.12",
156
156
  "@types/react": "^19.1.03",
157
157
  "jest": "^29.7.0",
158
- "nitrogen": "*",
158
+ "nitrogen": "^0.35.0",
159
159
  "react": "19.2.0",
160
160
  "react-native": "0.83.0",
161
161
  "react-native-nitro-modules": "*",
@@ -166,6 +166,6 @@
166
166
  "peerDependencies": {
167
167
  "react": "*",
168
168
  "react-native": "*",
169
- "react-native-nitro-modules": ">=32.0"
169
+ "react-native-nitro-modules": ">=35.0"
170
170
  }
171
171
  }