react-native-nitro-sqlite 9.4.0 → 9.6.0

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.
@@ -22,33 +22,43 @@
22
22
  namespace margelo::nitro::rnnitrosqlite {
23
23
 
24
24
  int initialize(JavaVM* vm) {
25
+ return facebook::jni::initialize(vm, []() {
26
+ ::margelo::nitro::rnnitrosqlite::registerAllNatives();
27
+ });
28
+ }
29
+
30
+ struct JHybridNitroSQLiteOnLoadSpecImpl: public jni::JavaClass<JHybridNitroSQLiteOnLoadSpecImpl, JHybridNitroSQLiteOnLoadSpec::JavaPart> {
31
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoad;";
32
+ static std::shared_ptr<JHybridNitroSQLiteOnLoadSpec> create() {
33
+ static auto constructorFn = javaClassStatic()->getConstructor<JHybridNitroSQLiteOnLoadSpecImpl::javaobject()>();
34
+ jni::local_ref<JHybridNitroSQLiteOnLoadSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
35
+ return javaPart->getJHybridNitroSQLiteOnLoadSpec();
36
+ }
37
+ };
38
+
39
+ void registerAllNatives() {
25
40
  using namespace margelo::nitro;
26
41
  using namespace margelo::nitro::rnnitrosqlite;
27
- using namespace facebook;
28
-
29
- return facebook::jni::initialize(vm, [] {
30
- // Register native JNI methods
31
- margelo::nitro::rnnitrosqlite::JHybridNitroSQLiteOnLoadSpec::registerNatives();
32
-
33
- // Register Nitro Hybrid Objects
34
- HybridObjectRegistry::registerHybridObjectConstructor(
35
- "NitroSQLite",
36
- []() -> std::shared_ptr<HybridObject> {
37
- static_assert(std::is_default_constructible_v<HybridNitroSQLite>,
38
- "The HybridObject \"HybridNitroSQLite\" is not default-constructible! "
39
- "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
40
- return std::make_shared<HybridNitroSQLite>();
41
- }
42
- );
43
- HybridObjectRegistry::registerHybridObjectConstructor(
44
- "NitroSQLiteOnLoad",
45
- []() -> std::shared_ptr<HybridObject> {
46
- static DefaultConstructableObject<JHybridNitroSQLiteOnLoadSpec::javaobject> object("com/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoad");
47
- auto instance = object.create();
48
- return instance->cthis()->shared();
49
- }
50
- );
51
- });
42
+
43
+ // Register native JNI methods
44
+ margelo::nitro::rnnitrosqlite::JHybridNitroSQLiteOnLoadSpec::CxxPart::registerNatives();
45
+
46
+ // Register Nitro Hybrid Objects
47
+ HybridObjectRegistry::registerHybridObjectConstructor(
48
+ "NitroSQLite",
49
+ []() -> std::shared_ptr<HybridObject> {
50
+ static_assert(std::is_default_constructible_v<HybridNitroSQLite>,
51
+ "The HybridObject \"HybridNitroSQLite\" is not default-constructible! "
52
+ "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
53
+ return std::make_shared<HybridNitroSQLite>();
54
+ }
55
+ );
56
+ HybridObjectRegistry::registerHybridObjectConstructor(
57
+ "NitroSQLiteOnLoad",
58
+ []() -> std::shared_ptr<HybridObject> {
59
+ return JHybridNitroSQLiteOnLoadSpecImpl::create();
60
+ }
61
+ );
52
62
  }
53
63
 
54
64
  } // namespace margelo::nitro::rnnitrosqlite
@@ -6,20 +6,29 @@
6
6
  ///
7
7
 
8
8
  #include <jni.h>
9
+ #include <functional>
9
10
  #include <NitroModules/NitroDefines.hpp>
10
11
 
11
12
  namespace margelo::nitro::rnnitrosqlite {
12
13
 
14
+ [[deprecated("Use registerNatives() instead.")]]
15
+ int initialize(JavaVM* vm);
16
+
13
17
  /**
14
- * Initializes the native (C++) part of RNNitroSQLite, and autolinks all Hybrid Objects.
15
- * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`).
18
+ * Register the native (C++) part of RNNitroSQLite, and autolinks all Hybrid Objects.
19
+ * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
20
+ * inside a `facebook::jni::initialize(vm, ...)` call.
16
21
  * Example:
17
22
  * ```cpp (cpp-adapter.cpp)
18
23
  * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
19
- * return margelo::nitro::rnnitrosqlite::initialize(vm);
24
+ * return facebook::jni::initialize(vm, []() {
25
+ * // register all RNNitroSQLite HybridObjects
26
+ * margelo::nitro::rnnitrosqlite::registerNatives();
27
+ * // any other custom registrations go here.
28
+ * });
20
29
  * }
21
30
  * ```
22
31
  */
23
- int initialize(JavaVM* vm);
32
+ void registerAllNatives();
24
33
 
25
34
  } // namespace margelo::nitro::rnnitrosqlite
@@ -13,37 +13,31 @@
13
13
 
14
14
  namespace margelo::nitro::rnnitrosqlite {
15
15
 
16
- jni::local_ref<JHybridNitroSQLiteOnLoadSpec::jhybriddata> JHybridNitroSQLiteOnLoadSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
17
- return makeCxxInstance(jThis);
18
- }
19
-
20
- void JHybridNitroSQLiteOnLoadSpec::registerNatives() {
21
- registerHybrid({
22
- makeNativeMethod("initHybrid", JHybridNitroSQLiteOnLoadSpec::initHybrid),
23
- });
16
+ std::shared_ptr<JHybridNitroSQLiteOnLoadSpec> JHybridNitroSQLiteOnLoadSpec::JavaPart::getJHybridNitroSQLiteOnLoadSpec() {
17
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
18
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridNitroSQLiteOnLoadSpec>(hybridObject);
19
+ if (castHybridObject == nullptr) [[unlikely]] {
20
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridNitroSQLiteOnLoadSpec!");
21
+ }
22
+ return castHybridObject;
24
23
  }
25
24
 
26
- size_t JHybridNitroSQLiteOnLoadSpec::getExternalMemorySize() noexcept {
27
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
28
- return method(_javaPart);
25
+ jni::local_ref<JHybridNitroSQLiteOnLoadSpec::CxxPart::jhybriddata> JHybridNitroSQLiteOnLoadSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
26
+ return makeCxxInstance(jThis);
29
27
  }
30
28
 
31
- bool JHybridNitroSQLiteOnLoadSpec::equals(const std::shared_ptr<HybridObject>& other) {
32
- if (auto otherCast = std::dynamic_pointer_cast<JHybridNitroSQLiteOnLoadSpec>(other)) {
33
- return _javaPart == otherCast->_javaPart;
29
+ std::shared_ptr<JHybridObject> JHybridNitroSQLiteOnLoadSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
30
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridNitroSQLiteOnLoadSpec::JavaPart>(javaPart);
31
+ if (castJavaPart == nullptr) [[unlikely]] {
32
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridNitroSQLiteOnLoadSpec::JavaPart!");
34
33
  }
35
- return false;
36
- }
37
-
38
- void JHybridNitroSQLiteOnLoadSpec::dispose() noexcept {
39
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
40
- method(_javaPart);
34
+ return std::make_shared<JHybridNitroSQLiteOnLoadSpec>(castJavaPart);
41
35
  }
42
36
 
43
- std::string JHybridNitroSQLiteOnLoadSpec::toString() {
44
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
45
- auto javaString = method(_javaPart);
46
- return javaString->toStdString();
37
+ void JHybridNitroSQLiteOnLoadSpec::CxxPart::registerNatives() {
38
+ registerHybrid({
39
+ makeNativeMethod("initHybrid", JHybridNitroSQLiteOnLoadSpec::CxxPart::initHybrid),
40
+ });
47
41
  }
48
42
 
49
43
  // Properties
@@ -51,7 +45,7 @@ namespace margelo::nitro::rnnitrosqlite {
51
45
 
52
46
  // Methods
53
47
  void JHybridNitroSQLiteOnLoadSpec::init() {
54
- static const auto method = javaClassStatic()->getMethod<void()>("init");
48
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("init");
55
49
  method(_javaPart);
56
50
  }
57
51
 
@@ -18,34 +18,33 @@ namespace margelo::nitro::rnnitrosqlite {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridNitroSQLiteOnLoadSpec: public jni::HybridClass<JHybridNitroSQLiteOnLoadSpec, JHybridObject>,
22
- public virtual HybridNitroSQLiteOnLoadSpec {
21
+ class JHybridNitroSQLiteOnLoadSpec: public virtual HybridNitroSQLiteOnLoadSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoadSpec;";
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 JHybridNitroSQLiteOnLoadSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridNitroSQLiteOnLoadSpec::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/rnnitrosqlite/HybridNitroSQLiteOnLoadSpec;";
25
+ std::shared_ptr<JHybridNitroSQLiteOnLoadSpec> getJHybridNitroSQLiteOnLoadSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoadSpec$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 JHybridNitroSQLiteOnLoadSpec(const jni::local_ref<JHybridNitroSQLiteOnLoadSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridNitroSQLiteOnLoadSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridNitroSQLiteOnLoadSpec() 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<JHybridNitroSQLiteOnLoadSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridNitroSQLiteOnLoadSpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -58,9 +57,7 @@ namespace margelo::nitro::rnnitrosqlite {
58
57
  void init() override;
59
58
 
60
59
  private:
61
- friend HybridBase;
62
- using HybridBase::HybridBase;
63
- jni::global_ref<JHybridNitroSQLiteOnLoadSpec::javaobject> _javaPart;
60
+ jni::global_ref<JHybridNitroSQLiteOnLoadSpec::JavaPart> _javaPart;
64
61
  };
65
62
 
66
63
  } // namespace margelo::nitro::rnnitrosqlite
@@ -24,32 +24,29 @@ import com.margelo.nitro.core.HybridObject
24
24
  "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
25
25
  )
26
26
  abstract class HybridNitroSQLiteOnLoadSpec: HybridObject() {
27
- @DoNotStrip
28
- private var mHybridData: HybridData = initHybrid()
29
-
30
- init {
31
- super.updateNative(mHybridData)
32
- }
27
+ // Properties
28
+
33
29
 
34
- override fun updateNative(hybridData: HybridData) {
35
- mHybridData = hybridData
36
- super.updateNative(hybridData)
37
- }
30
+ // Methods
31
+ @DoNotStrip
32
+ @Keep
33
+ abstract fun init(): Unit
38
34
 
39
35
  // Default implementation of `HybridObject.toString()`
40
36
  override fun toString(): String {
41
37
  return "[HybridObject NitroSQLiteOnLoad]"
42
38
  }
43
39
 
44
- // Properties
45
-
46
-
47
- // Methods
40
+ // C++ backing class
48
41
  @DoNotStrip
49
42
  @Keep
50
- abstract fun init(): Unit
51
-
52
- private external fun initHybrid(): HybridData
43
+ protected open class CxxPart(javaPart: HybridNitroSQLiteOnLoadSpec): HybridObject.CxxPart(javaPart) {
44
+ // C++ JHybridNitroSQLiteOnLoadSpec::CxxPart::initHybrid(...)
45
+ external override fun initHybrid(): HybridData
46
+ }
47
+ override fun createCxxPart(): CxxPart {
48
+ return CxxPart(this)
49
+ }
53
50
 
54
51
  companion object {
55
52
  protected const val TAG = "HybridNitroSQLiteOnLoadSpec"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-sqlite",
3
- "version": "9.4.0",
3
+ "version": "9.6.0",
4
4
  "description": "Fast SQLite library for React Native built using Nitro Modules",
5
5
  "main": "./lib/module/index",
6
6
  "module": "./lib/module/index",
@@ -70,16 +70,16 @@
70
70
  },
71
71
  "devDependencies": {
72
72
  "jest": "^30.2.0",
73
- "nitrogen": "0.33.5",
74
- "react": "19.1.1",
75
- "react-native": "0.82.1",
73
+ "nitrogen": "0.35.0",
74
+ "react": "19.2.3",
75
+ "react-native": "0.85.0-rc.0",
76
76
  "react-native-builder-bob": "^0.31.0",
77
- "react-native-nitro-modules": "0.33.5"
77
+ "react-native-nitro-modules": "0.35.0"
78
78
  },
79
79
  "peerDependencies": {
80
80
  "react": ">=17.0.0",
81
81
  "react-native": ">=0.75.0",
82
- "react-native-nitro-modules": ">=0.32.0"
82
+ "react-native-nitro-modules": ">=0.35.0"
83
83
  },
84
84
  "resolutions": {
85
85
  "@types/react": "^18.2.44"
@@ -93,7 +93,10 @@
93
93
  },
94
94
  "release-it": {
95
95
  "npm": {
96
- "publish": true
96
+ "publish": true,
97
+ "versionArgs": [
98
+ "--allow-same-version"
99
+ ]
97
100
  },
98
101
  "git": false,
99
102
  "github": {