react-native-nitro-modules 0.1.6 → 0.2.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.
Files changed (55) hide show
  1. package/README.md +7 -3
  2. package/android/CMakeLists.txt +1 -0
  3. package/cpp/core/HybridFunction.hpp +167 -0
  4. package/cpp/core/HybridObject.cpp +37 -128
  5. package/cpp/core/HybridObject.hpp +13 -149
  6. package/cpp/jsi/JSICache.cpp +25 -8
  7. package/cpp/jsi/JSICache.hpp +31 -24
  8. package/cpp/jsi/JSIConverter+AnyMap.hpp +22 -0
  9. package/cpp/jsi/JSIConverter+ArrayBuffer.hpp +15 -3
  10. package/cpp/jsi/JSIConverter+Function.hpp +9 -1
  11. package/cpp/jsi/JSIConverter+HybridObject.hpp +31 -76
  12. package/cpp/jsi/JSIConverter+Optional.hpp +9 -0
  13. package/cpp/jsi/JSIConverter+Promise.hpp +4 -0
  14. package/cpp/jsi/JSIConverter+Tuple.hpp +33 -0
  15. package/cpp/jsi/JSIConverter+UnorderedMap.hpp +20 -0
  16. package/cpp/jsi/JSIConverter+Variant.hpp +25 -53
  17. package/cpp/jsi/JSIConverter+Vector.hpp +21 -0
  18. package/cpp/jsi/JSIConverter.hpp +55 -7
  19. package/cpp/jsi/JSIHelpers.hpp +52 -0
  20. package/cpp/jsi/Promise.cpp +2 -2
  21. package/cpp/prototype/HybridObjectPrototype.cpp +87 -0
  22. package/cpp/prototype/HybridObjectPrototype.hpp +92 -0
  23. package/cpp/prototype/Prototype.hpp +163 -0
  24. package/cpp/prototype/PrototypeChain.hpp +78 -0
  25. package/cpp/threading/Dispatcher.cpp +1 -1
  26. package/cpp/turbomodule/NativeNitroModules.cpp +3 -4
  27. package/cpp/turbomodule/NativeNitroModules.hpp +1 -1
  28. package/cpp/utils/BorrowingReference+Owning.hpp +1 -1
  29. package/cpp/utils/BorrowingReference.hpp +1 -1
  30. package/ios/turbomodule/NitroModuleOnLoad.mm +0 -5
  31. package/lib/HybridObject.d.ts +20 -1
  32. package/lib/commonjs/index.js +0 -11
  33. package/lib/commonjs/index.js.map +1 -1
  34. package/lib/index.d.ts +0 -1
  35. package/lib/index.js +0 -1
  36. package/lib/module/index.js +0 -1
  37. package/lib/module/index.js.map +1 -1
  38. package/lib/tsconfig.tsbuildinfo +1 -1
  39. package/lib/typescript/HybridObject.d.ts +77 -0
  40. package/lib/typescript/HybridObject.d.ts.map +1 -0
  41. package/lib/typescript/NitroModules.d.ts.map +1 -0
  42. package/lib/typescript/index.d.ts +4 -0
  43. package/lib/typescript/index.d.ts.map +1 -0
  44. package/package.json +1 -1
  45. package/src/HybridObject.ts +20 -1
  46. package/src/index.ts +0 -1
  47. package/cpp/core/PointerHolder.hpp +0 -94
  48. package/cpp/test-object/TestHybridObject.cpp +0 -37
  49. package/cpp/test-object/TestHybridObject.hpp +0 -87
  50. package/cpp/utils/GetRuntimeID.hpp +0 -28
  51. package/lib/commonjs/createTestObject.js +0 -15
  52. package/lib/commonjs/createTestObject.js.map +0 -1
  53. package/lib/module/createTestObject.js +0 -8
  54. package/lib/module/createTestObject.js.map +0 -1
  55. package/src/createTestObject.ts +0 -40
@@ -1,94 +0,0 @@
1
- //
2
- // Created by Marc Rousavy on 16.04.24.
3
- //
4
-
5
- #pragma once
6
-
7
- #include "HybridObject.hpp"
8
- #include "NitroLogger.hpp"
9
- #include <memory>
10
- #include <mutex>
11
-
12
- namespace margelo::nitro {
13
-
14
- using namespace facebook;
15
-
16
- template <typename T>
17
- class PointerHolder final : public HybridObject {
18
- protected:
19
- // no default constructor
20
- PointerHolder() = delete;
21
-
22
- /**
23
- * Create a new instance of a pointer holder which holds the given shared_ptr.
24
- * @param name The name of the implementing class, for example "ViewWrapper".
25
- * @param pointer The pointer this class will hold. It might be released from JS at any point via `release()`.
26
- */
27
- PointerHolder(const char* name, std::shared_ptr<T> pointer) : HybridObject(name), _name(name), _pointer(pointer) {
28
- // eagerly initialize the release() method instead of putting it in `loadHybridMethods`
29
- registerHybridMethod("release", &PointerHolder<T>::release, this);
30
- registerHybridGetter("isValid", &PointerHolder<T>::getIsValid, this);
31
- }
32
-
33
- /**
34
- * Create a new instance of a pointer holder which holds a shared_ptr of the given value.
35
- * The shared_ptr will be move-constructed.
36
- * @param name The name of the implementing class, for example "ViewWrapper".
37
- * @param value The value this class will hold as a shared_ptr. It might be destroyed from JS at any point via `release()`.
38
- */
39
- PointerHolder(const char* name, T&& value) : PointerHolder(name, std::make_shared<T>(std::move(value))) {}
40
-
41
- /**
42
- * Called when the PointerHolder gets automatically destroyed (e.g. via GC) and the shared_ptr will be destroyed.
43
- */
44
- ~PointerHolder() {
45
- if (_pointer != nullptr) {
46
- Logger::log(TAG, "Automatically releasing %s... (~PointerHolder())", _name.c_str());
47
- }
48
- }
49
-
50
- protected:
51
- /**
52
- * Manually release this reference to the pointer.
53
- * If there are any other references to this pointer, no memory will be force-deleted.
54
- */
55
- virtual void release() {
56
- std::unique_lock lock(_mutex);
57
-
58
- if (_pointer == nullptr) {
59
- throw std::runtime_error("Pointer " + _name + " has already been manually released!");
60
- }
61
- Logger::log(TAG, "Manually releasing %s... (PointerHolder::release())", _name.c_str());
62
- _pointer = nullptr;
63
- }
64
-
65
- /**
66
- * Get the shared_ptr this class is holding.
67
- * If it has already been manually released from JS, this method will throw a runtime_error.
68
- */
69
- std::shared_ptr<T> pointee() {
70
- std::unique_lock lock(_mutex);
71
-
72
- if (_pointer == nullptr) {
73
- throw std::runtime_error("Pointer " + _name + " has already been manually released!");
74
- }
75
- return _pointer;
76
- }
77
-
78
- /**
79
- * Get if the pointer is still valid and strong.
80
- */
81
- bool getIsValid() {
82
- std::unique_lock lock(_mutex);
83
-
84
- return _pointer != nullptr;
85
- }
86
-
87
- private:
88
- std::string _name;
89
- std::shared_ptr<T> _pointer;
90
- std::mutex _mutex;
91
- static constexpr auto TAG = "PointerHolder";
92
- };
93
-
94
- } // namespace margelo::nitro
@@ -1,37 +0,0 @@
1
- //
2
- // Created by Marc Rousavy on 20.02.24.
3
- //
4
-
5
- #include "TestHybridObject.hpp"
6
-
7
- namespace margelo::nitro {
8
-
9
- void TestHybridObject::loadHybridMethods() {
10
- HybridObject::loadHybridMethods();
11
-
12
- // this.int get & set
13
- registerHybridGetter("int", &TestHybridObject::getInt, this);
14
- registerHybridSetter("int", &TestHybridObject::setInt, this);
15
- // this.string get & set
16
- registerHybridGetter("string", &TestHybridObject::getString, this);
17
- registerHybridSetter("string", &TestHybridObject::setString, this);
18
- // this.nullableString get & set
19
- registerHybridGetter("nullableString", &TestHybridObject::getNullableString, this);
20
- registerHybridSetter("nullableString", &TestHybridObject::setNullableString, this);
21
- // methods
22
- registerHybridMethod("multipleArguments", &TestHybridObject::multipleArguments, this);
23
- // callbacks
24
- registerHybridMethod("getIntGetter", &TestHybridObject::getIntGetter, this);
25
- registerHybridMethod("sayHelloCallback", &TestHybridObject::sayHelloCallback, this);
26
- // custom types
27
- registerHybridMethod("createNewHybridObject", &TestHybridObject::createNewHybridObject, this);
28
- // Promises
29
- registerHybridMethod("calculateFibonacci", &TestHybridObject::calculateFibonacci, this);
30
- registerHybridMethod("calculateFibonacciAsync", &TestHybridObject::calculateFibonacciAsync, this);
31
- registerHybridMethod("asyncVoidFunc", &TestHybridObject::asyncVoidFunc, this);
32
- registerHybridMethod("syncVoidFunc", &TestHybridObject::syncVoidFunc, this);
33
- // Error
34
- registerHybridMethod("throwError", &TestHybridObject::throwError, this);
35
- }
36
-
37
- } // namespace margelo::nitro
@@ -1,87 +0,0 @@
1
- //
2
- // Created by Marc Rousavy on 22.02.24.
3
- //
4
-
5
- #pragma once
6
-
7
- #include "HybridObject.hpp"
8
- #include <optional>
9
- #include <string>
10
- #include <vector>
11
-
12
- namespace margelo::nitro {
13
-
14
- class TestHybridObject : public HybridObject {
15
- public:
16
- explicit TestHybridObject() : HybridObject("TestHybridObject") {}
17
-
18
- public:
19
- int getInt() {
20
- return _int;
21
- }
22
- void setInt(int newValue) {
23
- _int = newValue;
24
- }
25
- std::string getString() {
26
- return _string;
27
- }
28
- void setString(const std::string& newValue) {
29
- _string = newValue;
30
- }
31
- std::optional<std::string> getNullableString() {
32
- return _nullableString;
33
- }
34
- void setNullableString(std::optional<std::string> string) {
35
- _nullableString = string;
36
- }
37
-
38
- std::unordered_map<std::string, double> multipleArguments(int first, bool second, std::string third) {
39
- return std::unordered_map<std::string, double>{{"first", 5312}, {"second", 532233}, {"third", 2786}};
40
- }
41
-
42
- std::function<int()> getIntGetter() {
43
- return [this]() -> int { return this->_int; };
44
- }
45
- void sayHelloCallback(std::function<void(std::string)> callback) {
46
- callback("Test Hybrid");
47
- }
48
- std::shared_ptr<TestHybridObject> createNewHybridObject() {
49
- return std::make_shared<TestHybridObject>();
50
- }
51
-
52
- void throwError() {
53
- throw std::runtime_error("This is an error!");
54
- }
55
-
56
- uint64_t calculateFibonacci(int count) {
57
- if (count <= 0)
58
- return 0;
59
- if (count == 1)
60
- return 1;
61
-
62
- return calculateFibonacci(count - 1) + calculateFibonacci(count - 2);
63
- }
64
-
65
- std::future<uint64_t> calculateFibonacciAsync(int count) {
66
- return std::async(std::launch::async, [count, this]() { return this->calculateFibonacci(count); });
67
- }
68
-
69
- void syncVoidFunc() {
70
- // this function does nothing
71
- }
72
-
73
- std::future<void> asyncVoidFunc() {
74
- return std::async(std::launch::async, []() {
75
- // this function does nothing
76
- });
77
- }
78
-
79
- private:
80
- int _int;
81
- std::string _string;
82
- std::optional<std::string> _nullableString;
83
-
84
- void loadHybridMethods() override;
85
- };
86
-
87
- } // namespace margelo::nitro
@@ -1,28 +0,0 @@
1
- //
2
- // GetRuntimeID.hpp
3
- // NitroModules
4
- //
5
- // Created by Marc Rousavy on 20.06.24.
6
- //
7
-
8
- #pragma once
9
-
10
- #include "ThreadUtils.hpp"
11
- #include <jsi/jsi.h>
12
-
13
- namespace margelo::nitro {
14
-
15
- using namespace facebook;
16
-
17
- /**
18
- * Get an ID for the given Runtime.
19
- *
20
- * The ID usually consists of a Runtime description (e.g. "HermesRuntime"),
21
- * and it's Thread (e.g. "com.facebook.react.runtime.JavaScript")
22
- */
23
- static inline std::string getRuntimeId(jsi::Runtime& runtime) {
24
- std::string threadName = ThreadUtils::getThreadName();
25
- return runtime.description() + std::string(" (") + threadName + std::string(")");
26
- }
27
-
28
- } // namespace margelo::nitro
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createCppTestHybridObject = createCppTestHybridObject;
7
- exports.createSwiftTestHybridObject = createSwiftTestHybridObject;
8
- var _ = require(".");
9
- function createCppTestHybridObject() {
10
- return _.NitroModules.get('TestHybridObject');
11
- }
12
- function createSwiftTestHybridObject() {
13
- return _.NitroModules.get('SwiftTestObject');
14
- }
15
- //# sourceMappingURL=createTestObject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_","require","createCppTestHybridObject","NitroModules","get","createSwiftTestHybridObject"],"sourceRoot":"../../src","sources":["createTestObject.ts"],"mappings":";;;;;;;AAAA,IAAAA,CAAA,GAAAC,OAAA;AAyBO,SAASC,yBAAyBA,CAAA,EAAqB;EAC5D,OAAOC,cAAY,CAACC,GAAG,CAAmB,kBAAkB,CAAC;AAC/D;AAUO,SAASC,2BAA2BA,CAAA,EAA0B;EACnE,OAAOF,cAAY,CAACC,GAAG,CAAwB,iBAAiB,CAAC;AACnE","ignoreList":[]}
@@ -1,8 +0,0 @@
1
- import { NitroModules } from '.';
2
- export function createCppTestHybridObject() {
3
- return NitroModules.get('TestHybridObject');
4
- }
5
- export function createSwiftTestHybridObject() {
6
- return NitroModules.get('SwiftTestObject');
7
- }
8
- //# sourceMappingURL=createTestObject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["NitroModules","createCppTestHybridObject","get","createSwiftTestHybridObject"],"sourceRoot":"../../src","sources":["createTestObject.ts"],"mappings":"AAAA,SAASA,YAAY,QAA2B,GAAG;AAyBnD,OAAO,SAASC,yBAAyBA,CAAA,EAAqB;EAC5D,OAAOD,YAAY,CAACE,GAAG,CAAmB,kBAAkB,CAAC;AAC/D;AAUA,OAAO,SAASC,2BAA2BA,CAAA,EAA0B;EACnE,OAAOH,YAAY,CAACE,GAAG,CAAwB,iBAAiB,CAAC;AACnE","ignoreList":[]}
@@ -1,40 +0,0 @@
1
- import { NitroModules, type HybridObject } from '.'
2
-
3
- export interface TestHybridObject extends HybridObject<{}> {
4
- // C++ getter & setter
5
- int: number
6
- string: string
7
- nullableString: string | undefined
8
- // C++ methods
9
- multipleArguments(
10
- first: number,
11
- second: boolean,
12
- third: string
13
- ): Record<string, number>
14
- getIntGetter(): () => number
15
- sayHelloCallback(callback: (name: string) => void): void
16
- createNewHybridObject(): TestHybridObject
17
- // C++ Threading
18
- calculateFibonacci(count: number): bigint
19
- calculateFibonacciAsync(count: number): Promise<bigint>
20
- asyncVoidFunc(): Promise<void>
21
- syncVoidFunc(): void
22
- // Errors
23
- throwError(): void
24
- }
25
-
26
- export function createCppTestHybridObject(): TestHybridObject {
27
- return NitroModules.get<TestHybridObject>('TestHybridObject')
28
- }
29
-
30
- export interface SwiftTestHybridObject extends HybridObject<{}> {
31
- // Swift getter & setter
32
- int: number
33
- // Swift methods
34
- throwError(): number
35
- asyncMethod(): Promise<number>
36
- }
37
-
38
- export function createSwiftTestHybridObject(): SwiftTestHybridObject {
39
- return NitroModules.get<SwiftTestHybridObject>('SwiftTestObject')
40
- }