react-native-nitro-modules 0.5.0 → 0.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.
Files changed (110) hide show
  1. package/NitroModules.podspec +3 -1
  2. package/README.md +33 -14
  3. package/android/gradle.properties +5 -5
  4. package/android/src/main/cpp/JNIOnLoad.cpp +8 -0
  5. package/android/src/main/cpp/core/ByteBufferArrayBuffer.hpp +47 -0
  6. package/android/src/main/cpp/core/JAnyMap.hpp +193 -0
  7. package/android/src/main/cpp/core/JAnyValue.hpp +191 -0
  8. package/android/src/main/cpp/core/JArrayBuffer.hpp +119 -0
  9. package/android/src/main/cpp/core/JHybridObject.hpp +11 -4
  10. package/android/src/main/cpp/core/JPromise.hpp +88 -0
  11. package/android/src/main/cpp/platform/NitroLogger.cpp +36 -0
  12. package/android/src/main/cpp/registry/JHybridObjectInitializer.hpp +1 -1
  13. package/android/src/main/cpp/registry/JHybridObjectRegistry.cpp +1 -1
  14. package/android/src/main/cpp/registry/JHybridObjectRegistry.hpp +1 -1
  15. package/android/src/main/cpp/utils/{JNISharedPtr.h → JNISharedPtr.hpp} +13 -1
  16. package/android/src/main/java/com/margelo/nitro/JNIOnLoad.java +27 -0
  17. package/android/src/main/java/com/margelo/nitro/NitroModulesPackage.java +1 -9
  18. package/android/src/main/java/com/margelo/nitro/core/AnyMap.kt +61 -0
  19. package/android/src/main/java/com/margelo/nitro/core/AnyValue.kt +153 -0
  20. package/android/src/main/java/com/margelo/nitro/core/ArrayBuffer.kt +84 -0
  21. package/android/src/main/java/com/margelo/nitro/{HybridObject.kt → core/HybridObject.kt} +12 -15
  22. package/android/src/main/java/com/margelo/nitro/{HybridObjectInitializer.java → core/HybridObjectInitializer.java} +1 -1
  23. package/android/src/main/java/com/margelo/nitro/{HybridObjectRegistry.java → core/HybridObjectRegistry.java} +6 -4
  24. package/android/src/main/java/com/margelo/nitro/core/Promise.kt +115 -0
  25. package/cpp/core/AnyMap.hpp +2 -2
  26. package/cpp/core/ArrayBuffer.cpp +5 -5
  27. package/cpp/core/ArrayBuffer.hpp +7 -9
  28. package/cpp/core/HybridFunction.hpp +119 -45
  29. package/cpp/core/HybridObject.cpp +17 -6
  30. package/cpp/core/HybridObject.hpp +32 -8
  31. package/cpp/jsi/JSICache.cpp +5 -5
  32. package/cpp/jsi/JSICache.hpp +1 -3
  33. package/cpp/jsi/JSIConverter+AnyMap.hpp +2 -2
  34. package/cpp/jsi/JSIConverter+ArrayBuffer.hpp +2 -2
  35. package/cpp/jsi/JSIConverter+Function.hpp +6 -5
  36. package/cpp/jsi/JSIConverter+HybridObject.hpp +6 -5
  37. package/cpp/jsi/JSIConverter+Optional.hpp +1 -1
  38. package/cpp/jsi/JSIConverter+Promise.hpp +4 -3
  39. package/cpp/jsi/JSIConverter+Tuple.hpp +1 -1
  40. package/cpp/jsi/JSIConverter+UnorderedMap.hpp +1 -1
  41. package/cpp/jsi/JSIConverter+Variant.hpp +1 -3
  42. package/cpp/jsi/JSIConverter+Vector.hpp +1 -1
  43. package/cpp/jsi/JSIConverter.hpp +11 -11
  44. package/cpp/jsi/JSPromise.cpp +2 -2
  45. package/cpp/platform/NitroLogger.hpp +67 -0
  46. package/cpp/prototype/HybridObjectPrototype.cpp +2 -2
  47. package/cpp/prototype/Prototype.hpp +43 -22
  48. package/cpp/registry/HybridObjectRegistry.cpp +4 -4
  49. package/cpp/threading/Dispatcher.cpp +4 -3
  50. package/cpp/threading/ThreadPool.cpp +2 -2
  51. package/cpp/turbomodule/NativeNitroModules.cpp +26 -8
  52. package/cpp/turbomodule/NativeNitroModules.h +1 -0
  53. package/cpp/turbomodule/NativeNitroModules.hpp +2 -0
  54. package/cpp/utils/TypeInfo.hpp +14 -0
  55. package/ios/core/AnyMapHolder.hpp +91 -0
  56. package/ios/core/AnyMapHolder.swift +316 -0
  57. package/ios/core/ArrayBufferHolder.hpp +6 -4
  58. package/ios/core/ArrayBufferHolder.swift +6 -5
  59. package/ios/core/HybridContext.hpp +3 -3
  60. package/ios/core/Promise.swift +20 -0
  61. package/ios/core/PromiseHolder.hpp +15 -11
  62. package/ios/platform/NitroLogger.mm +36 -0
  63. package/ios/platform/ThreadUtils.cpp +1 -1
  64. package/ios/turbomodule/NitroModuleOnLoad.mm +2 -1
  65. package/ios/utils/SwiftClosure.hpp +63 -0
  66. package/ios/utils/SwiftClosure.swift +58 -0
  67. package/lib/AnyMap.d.ts +3 -0
  68. package/lib/HybridObject.d.ts +15 -0
  69. package/lib/NativeNitroModules.d.ts +2 -0
  70. package/lib/NitroModules.d.ts +18 -0
  71. package/lib/NitroModules.js +24 -0
  72. package/lib/commonjs/NativeNitroModules.js.map +1 -1
  73. package/lib/commonjs/NitroModules.js +24 -0
  74. package/lib/commonjs/NitroModules.js.map +1 -1
  75. package/lib/commonjs/package.json +1 -0
  76. package/lib/module/AnyMap.js +1 -1
  77. package/lib/module/HybridObject.js +1 -1
  78. package/lib/module/ModuleNotFoundError.js +2 -0
  79. package/lib/module/ModuleNotFoundError.js.map +1 -1
  80. package/lib/module/NativeNitroModules.js +2 -0
  81. package/lib/module/NativeNitroModules.js.map +1 -1
  82. package/lib/module/NativeNitroModules.web.js +2 -0
  83. package/lib/module/NativeNitroModules.web.js.map +1 -1
  84. package/lib/module/NitroModules.js +26 -0
  85. package/lib/module/NitroModules.js.map +1 -1
  86. package/lib/module/index.js +2 -0
  87. package/lib/module/index.js.map +1 -1
  88. package/lib/module/package.json +1 -0
  89. package/lib/tsconfig.tsbuildinfo +1 -1
  90. package/lib/typescript/AnyMap.d.ts +20 -0
  91. package/lib/typescript/AnyMap.d.ts.map +1 -0
  92. package/lib/typescript/HybridObject.d.ts +98 -0
  93. package/lib/typescript/HybridObject.d.ts.map +1 -0
  94. package/lib/typescript/ModuleNotFoundError.d.ts.map +1 -0
  95. package/lib/typescript/NativeNitroModules.d.ts +17 -0
  96. package/lib/typescript/NativeNitroModules.d.ts.map +1 -0
  97. package/lib/typescript/NativeNitroModules.web.d.ts.map +1 -0
  98. package/lib/typescript/NitroModules.d.ts +44 -0
  99. package/lib/typescript/NitroModules.d.ts.map +1 -0
  100. package/lib/typescript/__tests__/index.test.d.ts.map +1 -0
  101. package/lib/typescript/index.d.ts.map +1 -0
  102. package/package.json +13 -12
  103. package/src/AnyMap.ts +3 -0
  104. package/src/HybridObject.ts +15 -0
  105. package/src/NativeNitroModules.ts +5 -0
  106. package/src/NitroModules.ts +24 -0
  107. package/android/src/main/cpp/core/JHybridObject.cpp +0 -8
  108. package/cpp/templates/IsInPack.hpp +0 -21
  109. package/cpp/utils/NitroLogger.hpp +0 -58
  110. package/ios/utils/ClosureWrapper.swift +0 -45
@@ -0,0 +1,36 @@
1
+ //
2
+ // NitroLogger.mm
3
+ // react-native-nitro
4
+ //
5
+ // Created by Marc Rousavy on 14.07.24.
6
+ //
7
+
8
+ #include "NitroLogger.hpp"
9
+ #include "AnyMapHolder.hpp"
10
+ #include <Foundation/Foundation.h>
11
+
12
+ namespace margelo::nitro {
13
+
14
+ const char* levelToString(LogLevel level) {
15
+ switch (level) {
16
+ case LogLevel::Debug:
17
+ return "DEBUG";
18
+ case LogLevel::Info:
19
+ return "INFO";
20
+ case LogLevel::Warning:
21
+ return "WARNING";
22
+ case LogLevel::Error:
23
+ return "ERROR";
24
+ default:
25
+ throw std::runtime_error("Invalid LogLevel!");
26
+ }
27
+ }
28
+
29
+ void Logger::nativeLog(LogLevel level, const char* tag, const std::string& message) {
30
+ #ifndef NDEBUG
31
+ const char* logLevel = levelToString(level);
32
+ NSLog(@"[%s] [Nitro.%s] %s", logLevel, tag, message.c_str());
33
+ #endif
34
+ }
35
+
36
+ } // namespace margelo::nitro
@@ -7,7 +7,7 @@
7
7
 
8
8
  #include "ThreadUtils.hpp"
9
9
  #include <pthread.h>
10
- #include <sstream>>
10
+ #include <sstream>
11
11
  #include <thread>
12
12
 
13
13
  namespace margelo::nitro {
@@ -10,9 +10,10 @@
10
10
  #import <Foundation/Foundation.h>
11
11
 
12
12
  // just import headers so we have syntax highlighting
13
- #import "PromiseHolder.hpp"
14
13
  #import "ArrayBufferHolder.hpp"
15
14
  #import "HybridContext.hpp"
15
+ #import "PromiseHolder.hpp"
16
+ #import "SwiftClosure.hpp"
16
17
 
17
18
  @interface NitroModulesOnLoad : NSObject
18
19
  @end
@@ -0,0 +1,63 @@
1
+ //
2
+ // SwiftClosure.hpp
3
+ // Nitro Modules
4
+ //
5
+ // Created by Marc Rousavy on 29.08.24.
6
+ //
7
+
8
+ #pragma once
9
+
10
+ #include <functional>
11
+ #include <memory>
12
+
13
+ namespace margelo::nitro {
14
+
15
+ /**
16
+ * Holds a Swift closure, including any captured values via `Unmanaged` context.
17
+ *
18
+ * This internally holds a `std::function`, which can be called via `()`,
19
+ * or accessed directly via `getFunction()`.
20
+ * Copying a `SwiftClosure` will copy the `std::function`.
21
+ */
22
+ struct SwiftClosure final {
23
+ public:
24
+ using CallFn = void(void*);
25
+ using DeleteFn = void(void*);
26
+
27
+ private:
28
+ std::function<void()> _function;
29
+
30
+ public:
31
+ explicit SwiftClosure(void* context, CallFn* call, DeleteFn* destroy) {
32
+ // Create a std::shared_ptr of the `void* context` which calls `destroy`
33
+ // once no references of it exist anymore.
34
+ // Since the std::function captures this std::shared_ptr, it can now be
35
+ // safely copied around, and only once no more references to it exist,
36
+ // `destroy()` will be called.
37
+ std::shared_ptr<void> sharedContext(context, destroy);
38
+ // Create a std::function that captures `sharedContext`.
39
+ // Once it gets destroyed, `destroy()` gets called.
40
+ _function = [sharedContext, call]() {
41
+ // Call the actual Swift closure.
42
+ call(sharedContext.get());
43
+ };
44
+ }
45
+
46
+ public:
47
+ /**
48
+ * Call the Swift Closure.
49
+ */
50
+ inline void operator()() {
51
+ _function();
52
+ }
53
+
54
+ public:
55
+ /**
56
+ * Gets the underlying `std::function`.
57
+ */
58
+ const std::function<void()>& getFunction() {
59
+ return _function;
60
+ }
61
+ };
62
+
63
+ } // namespace margelo::nitro
@@ -0,0 +1,58 @@
1
+ //
2
+ // SwiftClosure.swift
3
+ // NitroModules
4
+ //
5
+ // Created by Marc Rousavy on 14.08.24.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ /**
11
+ * Wraps a Swift closure in a Swift class.
12
+ * This can be used to create unmanaged pointers (`void*`) and
13
+ * passed to C-style function pointers via `void* context` parameters.
14
+ */
15
+ fileprivate final class ClosureWrapper {
16
+ private let closure: () -> Void
17
+
18
+ init(closure: @escaping () -> Void) {
19
+ self.closure = closure
20
+ }
21
+
22
+ func invoke() {
23
+ closure()
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Represents a Swift Closure that can be called from both C++ and Swift.
29
+ */
30
+ public typealias SwiftClosure = margelo.nitro.SwiftClosure
31
+
32
+ public extension SwiftClosure {
33
+ /**
34
+ * Create a new `SwiftClosure` wrapping the given Swift closure.
35
+ * This can then be called from both C++ and Swift.
36
+ */
37
+ init(wrappingClosure closure: @escaping () -> Void) {
38
+ // Wrap closure in void*, and increment it's ref count so it stays alive.
39
+ let context = Unmanaged.passRetained(ClosureWrapper(closure: closure)).toOpaque()
40
+
41
+ // Create a C-style Function Pointer, which calls the actual Swift closure.
42
+ let call: @convention(c) (UnsafeMutableRawPointer?) -> Void = { context in
43
+ // Unwrap context from void* to closure again. We are assuming that it has not been deleted yet.
44
+ let closure = Unmanaged<ClosureWrapper>.fromOpaque(context!).takeUnretainedValue()
45
+ // Call it!
46
+ closure.invoke()
47
+ }
48
+
49
+ // Create a C-style Function Pointer, which deletes the `ClosureWrapper`.
50
+ let destroy: @convention(c) (UnsafeMutableRawPointer?) -> Void = { context in
51
+ guard let context else { return }
52
+ // Release the void* holding our `ClosureWrapper`
53
+ Unmanaged<ClosureWrapper>.fromOpaque(context).release()
54
+ }
55
+
56
+ self.init(context, call, destroy)
57
+ }
58
+ }
package/lib/AnyMap.d.ts CHANGED
@@ -12,5 +12,8 @@ export type ValueType = string | number | boolean | bigint | null | ValueType[]
12
12
  * - Objects of primitives (`Record<string, ValueType>`)
13
13
  * - Arrays of arrays or objects
14
14
  * - Objects of arrays or objects
15
+ *
16
+ * @note It is recommended to always use typed `interface`s instead of `AnyMap` for
17
+ * both type safety, as well as better performance.
15
18
  */
16
19
  export type AnyMap = Record<string, ValueType>;
@@ -79,4 +79,19 @@ export interface HybridObject<Platforms extends PlatformSpec = {}> {
79
79
  * ```
80
80
  */
81
81
  equals(other: HybridObject<Platforms>): boolean;
82
+ /**
83
+ * Disposes any resources this {@linkcode HybridObject} might hold natively,
84
+ * and finally releases this {@linkcode HybridObject}'s `NativeState`.
85
+ *
86
+ * After calling {@linkcode dispose()}, this object can no longer be used.
87
+ *
88
+ * Eagerly disposing a {@linkcode HybridObject} could be beneficial for a queue-/handler-architecture
89
+ * where a bunch of Hybrid Objects are allocated, and later deallocated once a callback (e.g. a render function)
90
+ * completes.
91
+ *
92
+ * @note It is **NOT** required to call {@linkcode dispose()} manually, as the JavaScript
93
+ * Garbage Collector automatically disposes and releases any resources when needed.
94
+ * It is purely optional to eagerly-, and manually-, call {@linkcode dispose()} here - **use with caution!**
95
+ */
96
+ dispose(): void;
82
97
  }
@@ -5,6 +5,8 @@ export interface Spec extends TurboModule {
5
5
  createHybridObject(name: string, args?: UnsafeObject): UnsafeObject;
6
6
  hasHybridObject(name: string): boolean;
7
7
  getAllHybridObjectNames(): string[];
8
+ hasNativeState(obj: UnsafeObject): boolean;
9
+ removeNativeState(obj: UnsafeObject): void;
8
10
  }
9
11
  export declare function getNativeNitroModules(): Spec;
10
12
  declare global {
@@ -22,4 +22,22 @@ export declare const NitroModules: {
22
22
  * Returns whether a HybridObject under the given {@linkcode name} is registered, or not.
23
23
  */
24
24
  hasHybridObject(name: string): boolean;
25
+ /**
26
+ * Returns whether the given {@linkcode object} has a `NativeState` or not.
27
+ *
28
+ * This can be a quick way to check if an object is a valid {@linkcode HybridObject},
29
+ * and has not yet been disposed.
30
+ * @example
31
+ * ```ts
32
+ * const someObject = NitroModules.createHybridObject<Some>('Some')
33
+ * console.log(NitroModules.hasNativeState(someObject)) // -> true
34
+ * someObject.dispose()
35
+ * console.log(NitroModules.hasNativeState(someObject)) // -> false
36
+ * ```
37
+ */
38
+ hasNativeState(object: object): boolean;
39
+ /**
40
+ * Forcefully removes the `NativeState` of the given {@linkcode object}.
41
+ */
42
+ removeNativeState(object: object): void;
25
43
  };
@@ -32,4 +32,28 @@ export const NitroModules = {
32
32
  const nitro = getNativeNitroModules();
33
33
  return nitro.hasHybridObject(name);
34
34
  },
35
+ /**
36
+ * Returns whether the given {@linkcode object} has a `NativeState` or not.
37
+ *
38
+ * This can be a quick way to check if an object is a valid {@linkcode HybridObject},
39
+ * and has not yet been disposed.
40
+ * @example
41
+ * ```ts
42
+ * const someObject = NitroModules.createHybridObject<Some>('Some')
43
+ * console.log(NitroModules.hasNativeState(someObject)) // -> true
44
+ * someObject.dispose()
45
+ * console.log(NitroModules.hasNativeState(someObject)) // -> false
46
+ * ```
47
+ */
48
+ hasNativeState(object) {
49
+ const nitro = getNativeNitroModules();
50
+ return nitro.hasNativeState(object);
51
+ },
52
+ /**
53
+ * Forcefully removes the `NativeState` of the given {@linkcode object}.
54
+ */
55
+ removeNativeState(object) {
56
+ const nitro = getNativeNitroModules();
57
+ nitro.removeNativeState(object);
58
+ },
35
59
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_ModuleNotFoundError","turboModule","getNativeNitroModules","TurboModuleRegistry","getEnforcing","install","e","ModuleNotFoundError","isRuntimeAlive","cache","global","__nitroModulesJSICache","dispatcher","__nitroDispatcher"],"sourceRoot":"../../src","sources":["NativeNitroModules.ts"],"mappings":";;;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,oBAAA,GAAAD,OAAA;AASA,IAAIE,WAA6B;AAC1B,SAASC,qBAAqBA,CAAA,EAAS;EAC5C,IAAID,WAAW,IAAI,IAAI,EAAE;IACvB,IAAI;MACF;MACAA,WAAW,GAAGE,gCAAmB,CAACC,YAAY,CAAO,iBAAiB,CAAC;;MAEvE;MACAH,WAAW,CAACI,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,MAAM,IAAIC,wCAAmB,CAACD,CAAC,CAAC;IAClC;EACF;EAEA,OAAOL,WAAW;AACpB;AAOO,SAASO,cAAcA,CAAA,EAAG;EAC/B,MAAMC,KAAK,GAAGC,MAAM,CAACC,sBAAsB;EAC3C,MAAMC,UAAU,GAAGF,MAAM,CAACG,iBAAiB;EAC3C,OAAOJ,KAAK,IAAI,IAAI,IAAIG,UAAU,IAAI,IAAI;AAC5C","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_ModuleNotFoundError","turboModule","getNativeNitroModules","TurboModuleRegistry","getEnforcing","install","e","ModuleNotFoundError","isRuntimeAlive","cache","global","__nitroModulesJSICache","dispatcher","__nitroDispatcher"],"sourceRoot":"../../src","sources":["NativeNitroModules.ts"],"mappings":";;;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,oBAAA,GAAAD,OAAA;AAcA,IAAIE,WAA6B;AAC1B,SAASC,qBAAqBA,CAAA,EAAS;EAC5C,IAAID,WAAW,IAAI,IAAI,EAAE;IACvB,IAAI;MACF;MACAA,WAAW,GAAGE,gCAAmB,CAACC,YAAY,CAAO,iBAAiB,CAAC;;MAEvE;MACAH,WAAW,CAACI,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,MAAM,IAAIC,wCAAmB,CAACD,CAAC,CAAC;IAClC;EACF;EAEA,OAAOL,WAAW;AACpB;AAOO,SAASO,cAAcA,CAAA,EAAG;EAC/B,MAAMC,KAAK,GAAGC,MAAM,CAACC,sBAAsB;EAC3C,MAAMC,UAAU,GAAGF,MAAM,CAACG,iBAAiB;EAC3C,OAAOJ,KAAK,IAAI,IAAI,IAAIG,UAAU,IAAI,IAAI;AAC5C","ignoreList":[]}
@@ -41,6 +41,30 @@ const NitroModules = exports.NitroModules = {
41
41
  hasHybridObject(name) {
42
42
  const nitro = (0, _NativeNitroModules.getNativeNitroModules)();
43
43
  return nitro.hasHybridObject(name);
44
+ },
45
+ /**
46
+ * Returns whether the given {@linkcode object} has a `NativeState` or not.
47
+ *
48
+ * This can be a quick way to check if an object is a valid {@linkcode HybridObject},
49
+ * and has not yet been disposed.
50
+ * @example
51
+ * ```ts
52
+ * const someObject = NitroModules.createHybridObject<Some>('Some')
53
+ * console.log(NitroModules.hasNativeState(someObject)) // -> true
54
+ * someObject.dispose()
55
+ * console.log(NitroModules.hasNativeState(someObject)) // -> false
56
+ * ```
57
+ */
58
+ hasNativeState(object) {
59
+ const nitro = (0, _NativeNitroModules.getNativeNitroModules)();
60
+ return nitro.hasNativeState(object);
61
+ },
62
+ /**
63
+ * Forcefully removes the `NativeState` of the given {@linkcode object}.
64
+ */
65
+ removeNativeState(object) {
66
+ const nitro = (0, _NativeNitroModules.getNativeNitroModules)();
67
+ nitro.removeNativeState(object);
44
68
  }
45
69
  };
46
70
  //# sourceMappingURL=NitroModules.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_NativeNitroModules","require","NitroModules","exports","createHybridObject","name","nitro","getNativeNitroModules","instance","getAllHybridObjectNames","hasHybridObject"],"sourceRoot":"../../src","sources":["NitroModules.ts"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAGA;AACA;AACA;;AAKA;AACA;AACA;AACO,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,kBAAkBA,CAA8BC,IAAY,EAAK;IAC/D,MAAMC,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrC,MAAMC,QAAQ,GAAGF,KAAK,CAACF,kBAAkB,CAACC,IAAI,CAAC;IAC/C,OAAOG,QAAQ;EACjB,CAAC;EACD;AACF;AACA;EACEC,uBAAuBA,CAAA,EAAa;IAClC,MAAMH,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrC,OAAOD,KAAK,CAACG,uBAAuB,CAAC,CAAC;EACxC,CAAC;EACD;AACF;AACA;EACEC,eAAeA,CAACL,IAAY,EAAW;IACrC,MAAMC,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrC,OAAOD,KAAK,CAACI,eAAe,CAACL,IAAI,CAAC;EACpC;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_NativeNitroModules","require","NitroModules","exports","createHybridObject","name","nitro","getNativeNitroModules","instance","getAllHybridObjectNames","hasHybridObject","hasNativeState","object","removeNativeState"],"sourceRoot":"../../src","sources":["NitroModules.ts"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAGA;AACA;AACA;;AAKA;AACA;AACA;AACO,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,kBAAkBA,CAA8BC,IAAY,EAAK;IAC/D,MAAMC,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrC,MAAMC,QAAQ,GAAGF,KAAK,CAACF,kBAAkB,CAACC,IAAI,CAAC;IAC/C,OAAOG,QAAQ;EACjB,CAAC;EACD;AACF;AACA;EACEC,uBAAuBA,CAAA,EAAa;IAClC,MAAMH,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrC,OAAOD,KAAK,CAACG,uBAAuB,CAAC,CAAC;EACxC,CAAC;EACD;AACF;AACA;EACEC,eAAeA,CAACL,IAAY,EAAW;IACrC,MAAMC,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrC,OAAOD,KAAK,CAACI,eAAe,CAACL,IAAI,CAAC;EACpC,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEM,cAAcA,CAACC,MAAc,EAAW;IACtC,MAAMN,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrC,OAAOD,KAAK,CAACK,cAAc,CAACC,MAAM,CAAC;EACrC,CAAC;EACD;AACF;AACA;EACEC,iBAAiBA,CAACD,MAAc,EAAQ;IACtC,MAAMN,KAAK,GAAG,IAAAC,yCAAqB,EAAC,CAAC;IACrCD,KAAK,CAACO,iBAAiB,CAACD,MAAM,CAAC;EACjC;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -1,2 +1,2 @@
1
-
1
+ "use strict";
2
2
  //# sourceMappingURL=AnyMap.js.map
@@ -1,2 +1,2 @@
1
-
1
+ "use strict";
2
2
  //# sourceMappingURL=HybridObject.js.map
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+
1
3
  import { NativeModules, Platform } from 'react-native';
2
4
  const BULLET_POINT = '\n* ';
3
5
  function messageWithSuggestions(message, suggestions) {
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","BULLET_POINT","messageWithSuggestions","message","suggestions","join","getFrameworkType","ExpoConstants","NativeUnimoduleProxy","modulesConstants","ExponentConstants","appOwnership","ModuleNotFoundError","Error","constructor","cause","global","__turboModuleProxy","push","error","framework","OS"],"sourceRoot":"../../src","sources":["ModuleNotFoundError.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAOtD,MAAMC,YAAY,GAAG,MAAM;AAE3B,SAASC,sBAAsBA,CAC7BC,OAAe,EACfC,WAAqB,EACb;EACR,OAAOD,OAAO,GAAGF,YAAY,GAAGG,WAAW,CAACC,IAAI,CAACJ,YAAY,CAAC;AAChE;AAEA,SAASK,gBAAgBA,CAAA,EAAwC;EAC/D;EACA,MAAMC,aAAa,GACjBR,aAAa,CAACS,oBAAoB,EAAEC,gBAAgB,EAAEC,iBAAiB;EACzE,IAAIH,aAAa,IAAI,IAAI,EAAE;IACzB,IAAIA,aAAa,CAACI,YAAY,KAAK,MAAM,EAAE;MACzC;MACA,OAAO,SAAS;IAClB,CAAC,MAAM;MACL;MACA,OAAO,MAAM;IACf;EACF;EACA,OAAO,cAAc;AACvB;AAEA,OAAO,MAAMC,mBAAmB,SAASC,KAAK,CAAC;EAC7CC,WAAWA,CAACC,KAAe,EAAE;IAC3B;IACA,IAAIC,MAAM,CAACC,kBAAkB,IAAI,IAAI,EAAE;MACrC;MACA,MAAMd,OAAO,GACX,sFAAsF;MACxF,MAAMC,WAAqB,GAAG,EAAE;MAChCA,WAAW,CAACc,IAAI,CACd,2JACF,CAAC;MACD,MAAMC,KAAK,GAAGjB,sBAAsB,CAACC,OAAO,EAAEC,WAAW,CAAC;MAC1D,KAAK,CAACe,KAAK,EAAE;QAAEJ,KAAK,EAAEA;MAAM,CAAC,CAAC;MAC9B;IACF;IAEA,MAAMK,SAAS,GAAGd,gBAAgB,CAAC,CAAC;IACpC,IAAIc,SAAS,KAAK,SAAS,EAAE;MAC3B,KAAK,CACH,2GACF,CAAC;MACD;IACF;IAEA,MAAMjB,OAAO,GACX,uFAAuF;IACzF,MAAMC,WAAqB,GAAG,EAAE;IAChCA,WAAW,CAACc,IAAI,CACd,qHACF,CAAC;IACDd,WAAW,CAACc,IAAI,CACd,qOACF,CAAC;IACDd,WAAW,CAACc,IAAI,CACd,8GACF,CAAC;IACDd,WAAW,CAACc,IAAI,CAAC,gCAAgC,CAAC;IAClD,IAAIE,SAAS,KAAK,MAAM,EAAE;MACxBhB,WAAW,CAACc,IAAI,CAAC,oCAAoC,CAAC;IACxD;IACA,QAAQlB,QAAQ,CAACqB,EAAE;MACjB,KAAK,KAAK;MACV,KAAK,OAAO;QACVjB,WAAW,CAACc,IAAI,CACd,wDACF,CAAC;QACD;MACF,KAAK,SAAS;QACZd,WAAW,CAACc,IAAI,CAAC,6BAA6B,CAAC;QAC/C;MACF;QACE,MAAM,IAAIL,KAAK,CAAC,yCAAyCb,QAAQ,CAACqB,EAAE,GAAG,CAAC;IAC5E;IAEA,MAAMF,KAAK,GAAGjB,sBAAsB,CAACC,OAAO,EAAEC,WAAW,CAAC;IAC1D,KAAK,CAACe,KAAK,EAAE;MAAEJ,KAAK,EAAEA;IAAM,CAAC,CAAC;EAChC;AACF","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","BULLET_POINT","messageWithSuggestions","message","suggestions","join","getFrameworkType","ExpoConstants","NativeUnimoduleProxy","modulesConstants","ExponentConstants","appOwnership","ModuleNotFoundError","Error","constructor","cause","global","__turboModuleProxy","push","error","framework","OS"],"sourceRoot":"../../src","sources":["ModuleNotFoundError.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAOtD,MAAMC,YAAY,GAAG,MAAM;AAE3B,SAASC,sBAAsBA,CAC7BC,OAAe,EACfC,WAAqB,EACb;EACR,OAAOD,OAAO,GAAGF,YAAY,GAAGG,WAAW,CAACC,IAAI,CAACJ,YAAY,CAAC;AAChE;AAEA,SAASK,gBAAgBA,CAAA,EAAwC;EAC/D;EACA,MAAMC,aAAa,GACjBR,aAAa,CAACS,oBAAoB,EAAEC,gBAAgB,EAAEC,iBAAiB;EACzE,IAAIH,aAAa,IAAI,IAAI,EAAE;IACzB,IAAIA,aAAa,CAACI,YAAY,KAAK,MAAM,EAAE;MACzC;MACA,OAAO,SAAS;IAClB,CAAC,MAAM;MACL;MACA,OAAO,MAAM;IACf;EACF;EACA,OAAO,cAAc;AACvB;AAEA,OAAO,MAAMC,mBAAmB,SAASC,KAAK,CAAC;EAC7CC,WAAWA,CAACC,KAAe,EAAE;IAC3B;IACA,IAAIC,MAAM,CAACC,kBAAkB,IAAI,IAAI,EAAE;MACrC;MACA,MAAMd,OAAO,GACX,sFAAsF;MACxF,MAAMC,WAAqB,GAAG,EAAE;MAChCA,WAAW,CAACc,IAAI,CACd,2JACF,CAAC;MACD,MAAMC,KAAK,GAAGjB,sBAAsB,CAACC,OAAO,EAAEC,WAAW,CAAC;MAC1D,KAAK,CAACe,KAAK,EAAE;QAAEJ,KAAK,EAAEA;MAAM,CAAC,CAAC;MAC9B;IACF;IAEA,MAAMK,SAAS,GAAGd,gBAAgB,CAAC,CAAC;IACpC,IAAIc,SAAS,KAAK,SAAS,EAAE;MAC3B,KAAK,CACH,2GACF,CAAC;MACD;IACF;IAEA,MAAMjB,OAAO,GACX,uFAAuF;IACzF,MAAMC,WAAqB,GAAG,EAAE;IAChCA,WAAW,CAACc,IAAI,CACd,qHACF,CAAC;IACDd,WAAW,CAACc,IAAI,CACd,qOACF,CAAC;IACDd,WAAW,CAACc,IAAI,CACd,8GACF,CAAC;IACDd,WAAW,CAACc,IAAI,CAAC,gCAAgC,CAAC;IAClD,IAAIE,SAAS,KAAK,MAAM,EAAE;MACxBhB,WAAW,CAACc,IAAI,CAAC,oCAAoC,CAAC;IACxD;IACA,QAAQlB,QAAQ,CAACqB,EAAE;MACjB,KAAK,KAAK;MACV,KAAK,OAAO;QACVjB,WAAW,CAACc,IAAI,CACd,wDACF,CAAC;QACD;MACF,KAAK,SAAS;QACZd,WAAW,CAACc,IAAI,CAAC,6BAA6B,CAAC;QAC/C;MACF;QACE,MAAM,IAAIL,KAAK,CAAC,yCAAyCb,QAAQ,CAACqB,EAAE,GAAG,CAAC;IAC5E;IAEA,MAAMF,KAAK,GAAGjB,sBAAsB,CAACC,OAAO,EAAEC,WAAW,CAAC;IAC1D,KAAK,CAACe,KAAK,EAAE;MAAEJ,KAAK,EAAEA;IAAM,CAAC,CAAC;EAChC;AACF","ignoreList":[]}
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+
1
3
  import { TurboModuleRegistry } from 'react-native';
2
4
  import { ModuleNotFoundError } from './ModuleNotFoundError';
3
5
  let turboModule;
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","ModuleNotFoundError","turboModule","getNativeNitroModules","getEnforcing","install","e","isRuntimeAlive","cache","global","__nitroModulesJSICache","dispatcher","__nitroDispatcher"],"sourceRoot":"../../src","sources":["NativeNitroModules.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AAElD,SAASC,mBAAmB,QAAQ,uBAAuB;AAS3D,IAAIC,WAA6B;AACjC,OAAO,SAASC,qBAAqBA,CAAA,EAAS;EAC5C,IAAID,WAAW,IAAI,IAAI,EAAE;IACvB,IAAI;MACF;MACAA,WAAW,GAAGF,mBAAmB,CAACI,YAAY,CAAO,iBAAiB,CAAC;;MAEvE;MACAF,WAAW,CAACG,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,MAAM,IAAIL,mBAAmB,CAACK,CAAC,CAAC;IAClC;EACF;EAEA,OAAOJ,WAAW;AACpB;AAOA,OAAO,SAASK,cAAcA,CAAA,EAAG;EAC/B,MAAMC,KAAK,GAAGC,MAAM,CAACC,sBAAsB;EAC3C,MAAMC,UAAU,GAAGF,MAAM,CAACG,iBAAiB;EAC3C,OAAOJ,KAAK,IAAI,IAAI,IAAIG,UAAU,IAAI,IAAI;AAC5C","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","ModuleNotFoundError","turboModule","getNativeNitroModules","getEnforcing","install","e","isRuntimeAlive","cache","global","__nitroModulesJSICache","dispatcher","__nitroDispatcher"],"sourceRoot":"../../src","sources":["NativeNitroModules.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAElD,SAASC,mBAAmB,QAAQ,uBAAuB;AAc3D,IAAIC,WAA6B;AACjC,OAAO,SAASC,qBAAqBA,CAAA,EAAS;EAC5C,IAAID,WAAW,IAAI,IAAI,EAAE;IACvB,IAAI;MACF;MACAA,WAAW,GAAGF,mBAAmB,CAACI,YAAY,CAAO,iBAAiB,CAAC;;MAEvE;MACAF,WAAW,CAACG,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,MAAM,IAAIL,mBAAmB,CAACK,CAAC,CAAC;IAClC;EACF;EAEA,OAAOJ,WAAW;AACpB;AAOA,OAAO,SAASK,cAAcA,CAAA,EAAG;EAC/B,MAAMC,KAAK,GAAGC,MAAM,CAACC,sBAAsB;EAC3C,MAAMC,UAAU,GAAGF,MAAM,CAACG,iBAAiB;EAC3C,OAAOJ,KAAK,IAAI,IAAI,IAAIG,UAAU,IAAI,IAAI;AAC5C","ignoreList":[]}
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+
1
3
  export function getNativeNitroModules() {
2
4
  throw new Error(`Native NitroModules are not available on web! Make sure you're not calling getNativeNitroModules() in a web (.web.ts) environment.`);
3
5
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getNativeNitroModules","Error"],"sourceRoot":"../../src","sources":["NativeNitroModules.web.ts"],"mappings":"AAIA,OAAO,SAASA,qBAAqBA,CAAA,EAAS;EAC5C,MAAM,IAAIC,KAAK,CACb,oIACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["getNativeNitroModules","Error"],"sourceRoot":"../../src","sources":["NativeNitroModules.web.ts"],"mappings":";;AAIA,OAAO,SAASA,qBAAqBA,CAAA,EAAS;EAC5C,MAAM,IAAIC,KAAK,CACb,oIACF,CAAC;AACH","ignoreList":[]}
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+
1
3
  import { getNativeNitroModules } from './NativeNitroModules';
2
4
 
3
5
  // TODO: Do we wanna support such constructors?
@@ -36,6 +38,30 @@ export const NitroModules = {
36
38
  hasHybridObject(name) {
37
39
  const nitro = getNativeNitroModules();
38
40
  return nitro.hasHybridObject(name);
41
+ },
42
+ /**
43
+ * Returns whether the given {@linkcode object} has a `NativeState` or not.
44
+ *
45
+ * This can be a quick way to check if an object is a valid {@linkcode HybridObject},
46
+ * and has not yet been disposed.
47
+ * @example
48
+ * ```ts
49
+ * const someObject = NitroModules.createHybridObject<Some>('Some')
50
+ * console.log(NitroModules.hasNativeState(someObject)) // -> true
51
+ * someObject.dispose()
52
+ * console.log(NitroModules.hasNativeState(someObject)) // -> false
53
+ * ```
54
+ */
55
+ hasNativeState(object) {
56
+ const nitro = getNativeNitroModules();
57
+ return nitro.hasNativeState(object);
58
+ },
59
+ /**
60
+ * Forcefully removes the `NativeState` of the given {@linkcode object}.
61
+ */
62
+ removeNativeState(object) {
63
+ const nitro = getNativeNitroModules();
64
+ nitro.removeNativeState(object);
39
65
  }
40
66
  };
41
67
  //# sourceMappingURL=NitroModules.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getNativeNitroModules","NitroModules","createHybridObject","name","nitro","instance","getAllHybridObjectNames","hasHybridObject"],"sourceRoot":"../../src","sources":["NitroModules.ts"],"mappings":"AAAA,SAASA,qBAAqB,QAAQ,sBAAsB;;AAG5D;AACA;AACA;;AAKA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAG;EAC1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkBA,CAA8BC,IAAY,EAAK;IAC/D,MAAMC,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrC,MAAMK,QAAQ,GAAGD,KAAK,CAACF,kBAAkB,CAACC,IAAI,CAAC;IAC/C,OAAOE,QAAQ;EACjB,CAAC;EACD;AACF;AACA;EACEC,uBAAuBA,CAAA,EAAa;IAClC,MAAMF,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrC,OAAOI,KAAK,CAACE,uBAAuB,CAAC,CAAC;EACxC,CAAC;EACD;AACF;AACA;EACEC,eAAeA,CAACJ,IAAY,EAAW;IACrC,MAAMC,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrC,OAAOI,KAAK,CAACG,eAAe,CAACJ,IAAI,CAAC;EACpC;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getNativeNitroModules","NitroModules","createHybridObject","name","nitro","instance","getAllHybridObjectNames","hasHybridObject","hasNativeState","object","removeNativeState"],"sourceRoot":"../../src","sources":["NitroModules.ts"],"mappings":";;AAAA,SAASA,qBAAqB,QAAQ,sBAAsB;;AAG5D;AACA;AACA;;AAKA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAG;EAC1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkBA,CAA8BC,IAAY,EAAK;IAC/D,MAAMC,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrC,MAAMK,QAAQ,GAAGD,KAAK,CAACF,kBAAkB,CAACC,IAAI,CAAC;IAC/C,OAAOE,QAAQ;EACjB,CAAC;EACD;AACF;AACA;EACEC,uBAAuBA,CAAA,EAAa;IAClC,MAAMF,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrC,OAAOI,KAAK,CAACE,uBAAuB,CAAC,CAAC;EACxC,CAAC;EACD;AACF;AACA;EACEC,eAAeA,CAACJ,IAAY,EAAW;IACrC,MAAMC,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrC,OAAOI,KAAK,CAACG,eAAe,CAACJ,IAAI,CAAC;EACpC,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEK,cAAcA,CAACC,MAAc,EAAW;IACtC,MAAML,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrC,OAAOI,KAAK,CAACI,cAAc,CAACC,MAAM,CAAC;EACrC,CAAC;EACD;AACF;AACA;EACEC,iBAAiBA,CAACD,MAAc,EAAQ;IACtC,MAAML,KAAK,GAAGJ,qBAAqB,CAAC,CAAC;IACrCI,KAAK,CAACM,iBAAiB,CAACD,MAAM,CAAC;EACjC;AACF,CAAC","ignoreList":[]}
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+
1
3
  export * from './HybridObject';
2
4
  export * from './NitroModules';
3
5
  export * from './AnyMap';
@@ -1 +1 @@
1
- {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,UAAU","ignoreList":[]}
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,UAAU","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}