react-native-mmkv 2.6.1 → 2.6.3
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/MMKV/Core/CMakeLists.txt +13 -2
- package/MMKV/Core/MMKV.cpp +7 -3
- package/MMKV/Core/MMKV.h +1 -1
- package/MMKV/Core/MMKVLog.cpp +1 -1
- package/MMKV/Core/MMKVPredef.h +1 -1
- package/MMKV/Core/MMKV_OSX.cpp +2 -2
- package/MMKV/Core/MemoryFile_OSX.cpp +1 -1
- package/README.md +1 -0
- package/android/build.gradle +1 -0
- package/android/src/main/cpp/MmkvHostObject.cpp +1 -1
- package/android/src/main/cpp/cpp-adapter.cpp +5 -0
- package/cpp/TypedArray.cpp +187 -199
- package/cpp/TypedArray.h +112 -109
- package/ios/JSIUtils.mm +2 -1
- package/ios/MmkvModule.mm +12 -7
- package/lib/commonjs/hooks.js +7 -0
- package/lib/commonjs/hooks.js.map +1 -1
- package/lib/module/hooks.js +7 -0
- package/lib/module/hooks.js.map +1 -1
- package/lib/typescript/hooks.d.ts.map +1 -1
- package/package.json +7 -3
package/MMKV/Core/CMakeLists.txt
CHANGED
|
@@ -121,8 +121,6 @@ add_library(core
|
|
|
121
121
|
aes/openssl/openssl_md5_one.cpp
|
|
122
122
|
aes/openssl/openssl_md5.h
|
|
123
123
|
aes/openssl/openssl_md32_common.h
|
|
124
|
-
aes/openssl/openssl_aesv8-armx.S
|
|
125
|
-
aes/openssl/openssl_aes-armv4.S
|
|
126
124
|
aes/openssl/openssl_arm_arch.h
|
|
127
125
|
crc32/Checksum.h
|
|
128
126
|
crc32/crc32_armv8.cpp
|
|
@@ -133,8 +131,21 @@ add_library(core
|
|
|
133
131
|
MMKVPredef.h
|
|
134
132
|
)
|
|
135
133
|
|
|
134
|
+
IF (NOT MSVC)
|
|
135
|
+
# .S files is not supported by MSVC.
|
|
136
|
+
target_sources(core PRIVATE
|
|
137
|
+
aes/openssl/openssl_aesv8-armx.S
|
|
138
|
+
aes/openssl/openssl_aes-armv4.S)
|
|
139
|
+
ENDIF()
|
|
140
|
+
|
|
136
141
|
target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|
137
142
|
|
|
143
|
+
IF (WIN32)
|
|
144
|
+
# MMKV can be used only with Unicode on Windows.
|
|
145
|
+
target_compile_definitions(core PUBLIC UNICODE)
|
|
146
|
+
target_compile_definitions(core PUBLIC _UNICODE)
|
|
147
|
+
ENDIF()
|
|
148
|
+
|
|
138
149
|
set_target_properties(core PROPERTIES
|
|
139
150
|
CXX_STANDARD 17
|
|
140
151
|
CXX_EXTENSIONS OFF
|
package/MMKV/Core/MMKV.cpp
CHANGED
|
@@ -189,15 +189,16 @@ void initialize() {
|
|
|
189
189
|
#endif // __aarch64__ && defined(__linux__)
|
|
190
190
|
|
|
191
191
|
#if defined(MMKV_DEBUG) && !defined(MMKV_DISABLE_CRYPT)
|
|
192
|
-
AESCrypt::testAESCrypt();
|
|
193
|
-
KeyValueHolderCrypt::testAESToMMBuffer();
|
|
192
|
+
// AESCrypt::testAESCrypt();
|
|
193
|
+
// KeyValueHolderCrypt::testAESToMMBuffer();
|
|
194
194
|
#endif
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
ThreadOnceToken_t once_control = ThreadOnceUninitialized;
|
|
198
198
|
|
|
199
|
-
void MMKV::initializeMMKV(const MMKVPath_t &rootDir, MMKVLogLevel logLevel) {
|
|
199
|
+
void MMKV::initializeMMKV(const MMKVPath_t &rootDir, MMKVLogLevel logLevel, mmkv::LogHandler handler) {
|
|
200
200
|
g_currentLogLevel = logLevel;
|
|
201
|
+
g_logHandler = handler;
|
|
201
202
|
|
|
202
203
|
ThreadLock::ThreadOnce(&once_control, initialize);
|
|
203
204
|
|
|
@@ -975,12 +976,15 @@ void MMKV::sync(SyncFlag flag) {
|
|
|
975
976
|
}
|
|
976
977
|
|
|
977
978
|
void MMKV::lock() {
|
|
979
|
+
SCOPED_LOCK(m_lock);
|
|
978
980
|
m_exclusiveProcessLock->lock();
|
|
979
981
|
}
|
|
980
982
|
void MMKV::unlock() {
|
|
983
|
+
SCOPED_LOCK(m_lock);
|
|
981
984
|
m_exclusiveProcessLock->unlock();
|
|
982
985
|
}
|
|
983
986
|
bool MMKV::try_lock() {
|
|
987
|
+
SCOPED_LOCK(m_lock);
|
|
984
988
|
return m_exclusiveProcessLock->try_lock();
|
|
985
989
|
}
|
|
986
990
|
|
package/MMKV/Core/MMKV.h
CHANGED
|
@@ -156,7 +156,7 @@ class MMKV {
|
|
|
156
156
|
|
|
157
157
|
public:
|
|
158
158
|
// call this before getting any MMKV instance
|
|
159
|
-
static void initializeMMKV(const MMKVPath_t &rootDir, MMKVLogLevel logLevel = MMKVLogInfo);
|
|
159
|
+
static void initializeMMKV(const MMKVPath_t &rootDir, MMKVLogLevel logLevel = MMKVLogInfo, mmkv::LogHandler handler = nullptr);
|
|
160
160
|
|
|
161
161
|
#ifdef MMKV_APPLE
|
|
162
162
|
// protect from some old code that don't call initializeMMKV()
|
package/MMKV/Core/MMKVLog.cpp
CHANGED
|
@@ -28,7 +28,7 @@ MMKVLogLevel g_currentLogLevel = MMKVLogDebug;
|
|
|
28
28
|
MMKVLogLevel g_currentLogLevel = MMKVLogInfo;
|
|
29
29
|
#endif
|
|
30
30
|
|
|
31
|
-
mmkv::LogHandler g_logHandler;
|
|
31
|
+
mmkv::LogHandler g_logHandler = nullptr;
|
|
32
32
|
|
|
33
33
|
#ifndef __FILE_NAME__
|
|
34
34
|
const char *_getFileName(const char *path) {
|
package/MMKV/Core/MMKVPredef.h
CHANGED
package/MMKV/Core/MMKV_OSX.cpp
CHANGED
|
@@ -186,10 +186,10 @@ NSObject *MMKV::getObject(MMKVKey_t key, Class cls) {
|
|
|
186
186
|
} else {
|
|
187
187
|
if ([cls conformsToProtocol:@protocol(NSCoding)]) {
|
|
188
188
|
auto tmp = [NSData dataWithBytesNoCopy:data.getPtr() length:data.length() freeWhenDone:NO];
|
|
189
|
-
try {
|
|
189
|
+
@try {
|
|
190
190
|
id result = [NSKeyedUnarchiver unarchiveObjectWithData:tmp];
|
|
191
191
|
return result;
|
|
192
|
-
} catch (NSException *exception) {
|
|
192
|
+
} @catch (NSException *exception) {
|
|
193
193
|
MMKVError("%s", exception.reason);
|
|
194
194
|
}
|
|
195
195
|
}
|
|
@@ -61,7 +61,7 @@ bool tryAtomicRename(const char *src, const char *dst) {
|
|
|
61
61
|
bool renamed = false;
|
|
62
62
|
|
|
63
63
|
// try atomic swap first
|
|
64
|
-
if (@available(iOS 10.0, watchOS 3.0, *)) {
|
|
64
|
+
if (@available(iOS 10.0, watchOS 3.0, macOS 10.12, *)) {
|
|
65
65
|
// renameat2() equivalent
|
|
66
66
|
if (renamex_np(src, dst, RENAME_SWAP) == 0) {
|
|
67
67
|
renamed = true;
|
package/README.md
CHANGED
|
@@ -196,6 +196,7 @@ A mocked MMKV instance is automatically used when testing with Jest, so you will
|
|
|
196
196
|
* [Using MMKV with mobx-persist](./docs/WRAPPER_MOBXPERSIST.md)
|
|
197
197
|
* [Using MMKV with zustand persist-middleware](./docs/WRAPPER_ZUSTAND_PERSIST_MIDDLEWARE.md)
|
|
198
198
|
* [Using MMKV with jotai](./docs/WRAPPER_JOTAI.md)
|
|
199
|
+
* [Using MMKV with react-query](./docs/WRAPPER_REACT_QUERY.md)
|
|
199
200
|
* [How is this library different from **react-native-mmkv-storage**?](https://github.com/mrousavy/react-native-mmkv/issues/100#issuecomment-886477361)
|
|
200
201
|
|
|
201
202
|
## Limitations
|
package/android/build.gradle
CHANGED
|
@@ -55,7 +55,7 @@ jsi::Value MmkvHostObject::get(jsi::Runtime& runtime, const jsi::PropNameID& pro
|
|
|
55
55
|
auto funcName = "MMKV." + propName;
|
|
56
56
|
|
|
57
57
|
if (propName == "set") {
|
|
58
|
-
// MMKV.set(key: string, value: string | number | bool)
|
|
58
|
+
// MMKV.set(key: string, value: string | number | bool | Uint8Array)
|
|
59
59
|
return jsi::Function::createFromHostFunction(runtime,
|
|
60
60
|
jsi::PropNameID::forAscii(runtime, funcName),
|
|
61
61
|
2, // key, value
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
#include <jsi/jsi.h>
|
|
3
3
|
#include <MMKV.h>
|
|
4
4
|
#include "MmkvHostObject.h"
|
|
5
|
+
#include "TypedArray.h"
|
|
5
6
|
|
|
6
7
|
using namespace facebook;
|
|
7
8
|
|
|
@@ -32,6 +33,10 @@ void install(jsi::Runtime& jsiRuntime) {
|
|
|
32
33
|
return jsi::Object::createFromHostObject(runtime, instance);
|
|
33
34
|
});
|
|
34
35
|
jsiRuntime.global().setProperty(jsiRuntime, "mmkvCreateNewInstance", std::move(mmkvCreateNewInstance));
|
|
36
|
+
|
|
37
|
+
// Adds the PropNameIDCache object to the Runtime. If the Runtime gets destroyed, the Object gets destroyed and the cache gets invalidated.
|
|
38
|
+
auto propNameIdCache = std::make_shared<InvalidateCacheOnDestroy>(jsiRuntime);
|
|
39
|
+
jsiRuntime.global().setProperty(jsiRuntime, "mmkvArrayBufferPropNameIdCache", jsi::Object::createFromHostObject(jsiRuntime, propNameIdCache));
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
std::string jstringToStdString(JNIEnv *env, jstring jStr) {
|
package/cpp/TypedArray.cpp
CHANGED
|
@@ -9,62 +9,70 @@
|
|
|
9
9
|
#include "TypedArray.h"
|
|
10
10
|
|
|
11
11
|
#include <unordered_map>
|
|
12
|
+
#include <memory>
|
|
13
|
+
#include <utility>
|
|
14
|
+
#include <vector>
|
|
15
|
+
#include <algorithm>
|
|
16
|
+
#include <string>
|
|
12
17
|
|
|
13
18
|
template <TypedArrayKind T>
|
|
14
19
|
using ContentType = typename typedArrayTypeMap<T>::type;
|
|
15
20
|
|
|
16
|
-
enum class Prop
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Float64Array, // "Float64Array"
|
|
21
|
+
enum class Prop {
|
|
22
|
+
Buffer, // "buffer"
|
|
23
|
+
Constructor, // "constructor"
|
|
24
|
+
Name, // "name"
|
|
25
|
+
Proto, // "__proto__"
|
|
26
|
+
Length, // "length"
|
|
27
|
+
ByteLength, // "byteLength"
|
|
28
|
+
ByteOffset, // "offset"
|
|
29
|
+
IsView, // "isView"
|
|
30
|
+
ArrayBuffer, // "ArrayBuffer"
|
|
31
|
+
Int8Array, // "Int8Array"
|
|
32
|
+
Int16Array, // "Int16Array"
|
|
33
|
+
Int32Array, // "Int32Array"
|
|
34
|
+
Uint8Array, // "Uint8Array"
|
|
35
|
+
Uint8ClampedArray, // "Uint8ClampedArray"
|
|
36
|
+
Uint16Array, // "Uint16Array"
|
|
37
|
+
Uint32Array, // "Uint32Array"
|
|
38
|
+
Float32Array, // "Float32Array"
|
|
39
|
+
Float64Array, // "Float64Array"
|
|
36
40
|
};
|
|
37
41
|
|
|
38
|
-
class PropNameIDCache
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
{
|
|
45
|
-
this->props[prop] = std::make_unique<jsi::PropNameID>(createProp(runtime, prop));
|
|
46
|
-
}
|
|
47
|
-
return *(this->props[prop]);
|
|
42
|
+
class PropNameIDCache {
|
|
43
|
+
public:
|
|
44
|
+
const jsi::PropNameID &get(jsi::Runtime &runtime, Prop prop) {
|
|
45
|
+
auto key = reinterpret_cast<uintptr_t>(&runtime);
|
|
46
|
+
if (this->props.find(key) == this->props.end()) {
|
|
47
|
+
this->props[key] = std::unordered_map<Prop, std::unique_ptr<jsi::PropNameID>>();
|
|
48
48
|
}
|
|
49
|
+
if (!this->props[key][prop]) {
|
|
50
|
+
this->props[key][prop] = std::make_unique<jsi::PropNameID>(createProp(runtime, prop));
|
|
51
|
+
}
|
|
52
|
+
return *(this->props[key][prop]);
|
|
53
|
+
}
|
|
49
54
|
|
|
50
|
-
|
|
55
|
+
const jsi::PropNameID &getConstructorNameProp(jsi::Runtime &runtime, TypedArrayKind kind);
|
|
51
56
|
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
57
|
+
void invalidate(uintptr_t key) {
|
|
58
|
+
if (props.find(key) != props.end()) {
|
|
59
|
+
props[key].clear();
|
|
55
60
|
}
|
|
61
|
+
}
|
|
56
62
|
|
|
57
|
-
private:
|
|
58
|
-
|
|
63
|
+
private:
|
|
64
|
+
std::unordered_map<uintptr_t, std::unordered_map<Prop, std::unique_ptr<jsi::PropNameID>>> props;
|
|
59
65
|
|
|
60
|
-
|
|
66
|
+
jsi::PropNameID createProp(jsi::Runtime &runtime, Prop prop);
|
|
61
67
|
};
|
|
62
68
|
|
|
63
69
|
PropNameIDCache propNameIDCache;
|
|
64
70
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
InvalidateCacheOnDestroy::InvalidateCacheOnDestroy(jsi::Runtime &runtime) {
|
|
72
|
+
key = reinterpret_cast<uintptr_t>(&runtime);
|
|
73
|
+
}
|
|
74
|
+
InvalidateCacheOnDestroy::~InvalidateCacheOnDestroy() {
|
|
75
|
+
propNameIDCache.invalidate(key);
|
|
68
76
|
}
|
|
69
77
|
|
|
70
78
|
TypedArrayKind getTypedArrayKindForName(const std::string &name);
|
|
@@ -82,235 +90,216 @@ TypedArrayBase::TypedArrayBase(jsi::Runtime &runtime, size_t size, TypedArrayKin
|
|
|
82
90
|
TypedArrayBase::TypedArrayBase(jsi::Runtime &runtime, const jsi::Object &obj)
|
|
83
91
|
: jsi::Object(jsi::Value(runtime, obj).asObject(runtime)) {}
|
|
84
92
|
|
|
85
|
-
TypedArrayKind TypedArrayBase::getKind(jsi::Runtime &runtime) const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
};
|
|
93
|
+
TypedArrayKind TypedArrayBase::getKind(jsi::Runtime &runtime) const {
|
|
94
|
+
auto constructorName = this->getProperty(runtime, propNameIDCache.get(runtime, Prop::Constructor))
|
|
95
|
+
.asObject(runtime)
|
|
96
|
+
.getProperty(runtime, propNameIDCache.get(runtime, Prop::Name))
|
|
97
|
+
.asString(runtime)
|
|
98
|
+
.utf8(runtime);
|
|
99
|
+
return getTypedArrayKindForName(constructorName);
|
|
100
|
+
}
|
|
94
101
|
|
|
95
|
-
size_t TypedArrayBase::size(jsi::Runtime &runtime) const
|
|
96
|
-
|
|
97
|
-
return getProperty(runtime, propNameIDCache.get(runtime, Prop::Length)).asNumber();
|
|
102
|
+
size_t TypedArrayBase::size(jsi::Runtime &runtime) const {
|
|
103
|
+
return getProperty(runtime, propNameIDCache.get(runtime, Prop::Length)).asNumber();
|
|
98
104
|
}
|
|
99
105
|
|
|
100
|
-
size_t TypedArrayBase::length(jsi::Runtime &runtime) const
|
|
101
|
-
|
|
102
|
-
return getProperty(runtime, propNameIDCache.get(runtime, Prop::Length)).asNumber();
|
|
106
|
+
size_t TypedArrayBase::length(jsi::Runtime &runtime) const {
|
|
107
|
+
return getProperty(runtime, propNameIDCache.get(runtime, Prop::Length)).asNumber();
|
|
103
108
|
}
|
|
104
109
|
|
|
105
|
-
size_t TypedArrayBase::byteLength(jsi::Runtime &runtime) const
|
|
106
|
-
|
|
107
|
-
return getProperty(runtime, propNameIDCache.get(runtime, Prop::ByteLength)).asNumber();
|
|
110
|
+
size_t TypedArrayBase::byteLength(jsi::Runtime &runtime) const {
|
|
111
|
+
return getProperty(runtime, propNameIDCache.get(runtime, Prop::ByteLength)).asNumber();
|
|
108
112
|
}
|
|
109
113
|
|
|
110
|
-
size_t TypedArrayBase::byteOffset(jsi::Runtime &runtime) const
|
|
111
|
-
|
|
112
|
-
return getProperty(runtime, propNameIDCache.get(runtime, Prop::ByteOffset)).asNumber();
|
|
114
|
+
size_t TypedArrayBase::byteOffset(jsi::Runtime &runtime) const {
|
|
115
|
+
return getProperty(runtime, propNameIDCache.get(runtime, Prop::ByteOffset)).asNumber();
|
|
113
116
|
}
|
|
114
117
|
|
|
115
|
-
bool TypedArrayBase::hasBuffer(jsi::Runtime &runtime) const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return buffer.isObject() && buffer.asObject(runtime).isArrayBuffer(runtime);
|
|
118
|
+
bool TypedArrayBase::hasBuffer(jsi::Runtime &runtime) const {
|
|
119
|
+
auto buffer = getProperty(runtime, propNameIDCache.get(runtime, Prop::Buffer));
|
|
120
|
+
return buffer.isObject() && buffer.asObject(runtime).isArrayBuffer(runtime);
|
|
119
121
|
}
|
|
120
122
|
|
|
121
|
-
std::vector<uint8_t> TypedArrayBase::toVector(jsi::Runtime &runtime)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
auto end = start + byteLength(runtime);
|
|
126
|
-
return std::vector<uint8_t>(start, end);
|
|
123
|
+
std::vector<uint8_t> TypedArrayBase::toVector(jsi::Runtime &runtime) {
|
|
124
|
+
auto start = reinterpret_cast<uint8_t *>(getBuffer(runtime).data(runtime) + byteOffset(runtime));
|
|
125
|
+
auto end = start + byteLength(runtime);
|
|
126
|
+
return std::vector<uint8_t>(start, end);
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
jsi::ArrayBuffer TypedArrayBase::getBuffer(jsi::Runtime &runtime) const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
else
|
|
137
|
-
{
|
|
138
|
-
throw std::runtime_error("no ArrayBuffer attached");
|
|
139
|
-
}
|
|
129
|
+
jsi::ArrayBuffer TypedArrayBase::getBuffer(jsi::Runtime &runtime) const {
|
|
130
|
+
auto buffer = getProperty(runtime, propNameIDCache.get(runtime, Prop::Buffer));
|
|
131
|
+
if (buffer.isObject() && buffer.asObject(runtime).isArrayBuffer(runtime)) {
|
|
132
|
+
return buffer.asObject(runtime).getArrayBuffer(runtime);
|
|
133
|
+
} else {
|
|
134
|
+
throw std::runtime_error("no ArrayBuffer attached");
|
|
135
|
+
}
|
|
140
136
|
}
|
|
141
137
|
|
|
142
|
-
bool isTypedArray(jsi::Runtime &runtime, const jsi::Object &jsObj)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
else
|
|
156
|
-
{
|
|
157
|
-
throw std::runtime_error("value is not a boolean");
|
|
158
|
-
}
|
|
138
|
+
bool isTypedArray(jsi::Runtime &runtime, const jsi::Object &jsObj) {
|
|
139
|
+
auto jsVal = runtime.global()
|
|
140
|
+
.getProperty(runtime, propNameIDCache.get(runtime, Prop::ArrayBuffer))
|
|
141
|
+
.asObject(runtime)
|
|
142
|
+
.getProperty(runtime, propNameIDCache.get(runtime, Prop::IsView))
|
|
143
|
+
.asObject(runtime)
|
|
144
|
+
.asFunction(runtime)
|
|
145
|
+
.callWithThis(runtime, runtime.global(), {jsi::Value(runtime, jsObj)});
|
|
146
|
+
if (jsVal.isBool()) {
|
|
147
|
+
return jsVal.getBool();
|
|
148
|
+
} else {
|
|
149
|
+
throw std::runtime_error("value is not a boolean");
|
|
150
|
+
}
|
|
159
151
|
}
|
|
160
152
|
|
|
161
|
-
TypedArrayBase getTypedArray(jsi::Runtime &runtime, const jsi::Object &jsObj)
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
else
|
|
175
|
-
{
|
|
176
|
-
throw std::runtime_error("value is not a boolean");
|
|
177
|
-
}
|
|
153
|
+
TypedArrayBase getTypedArray(jsi::Runtime &runtime, const jsi::Object &jsObj) {
|
|
154
|
+
auto jsVal = runtime.global()
|
|
155
|
+
.getProperty(runtime, propNameIDCache.get(runtime, Prop::ArrayBuffer))
|
|
156
|
+
.asObject(runtime)
|
|
157
|
+
.getProperty(runtime, propNameIDCache.get(runtime, Prop::IsView))
|
|
158
|
+
.asObject(runtime)
|
|
159
|
+
.asFunction(runtime)
|
|
160
|
+
.callWithThis(runtime, runtime.global(), {jsi::Value(runtime, jsObj)});
|
|
161
|
+
if (jsVal.isBool()) {
|
|
162
|
+
return TypedArrayBase(runtime, jsObj);
|
|
163
|
+
} else {
|
|
164
|
+
throw std::runtime_error("value is not a boolean");
|
|
165
|
+
}
|
|
178
166
|
}
|
|
179
167
|
|
|
180
|
-
std::vector<uint8_t> arrayBufferToVector(jsi::Runtime &runtime, jsi::Object &jsObj)
|
|
181
|
-
{
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
auto jsArrayBuffer = jsObj.getArrayBuffer(runtime);
|
|
168
|
+
std::vector<uint8_t> arrayBufferToVector(jsi::Runtime &runtime, jsi::Object &jsObj) {
|
|
169
|
+
if (!jsObj.isArrayBuffer(runtime)) {
|
|
170
|
+
throw std::runtime_error("Object is not an ArrayBuffer");
|
|
171
|
+
}
|
|
172
|
+
auto jsArrayBuffer = jsObj.getArrayBuffer(runtime);
|
|
187
173
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
174
|
+
uint8_t *dataBlock = jsArrayBuffer.data(runtime);
|
|
175
|
+
size_t blockSize =
|
|
176
|
+
jsArrayBuffer.getProperty(runtime, propNameIDCache.get(runtime, Prop::ByteLength)).asNumber();
|
|
177
|
+
return std::vector<uint8_t>(dataBlock, dataBlock + blockSize);
|
|
192
178
|
}
|
|
193
179
|
|
|
194
180
|
void arrayBufferUpdate(
|
|
195
181
|
jsi::Runtime &runtime,
|
|
196
182
|
jsi::ArrayBuffer &buffer,
|
|
197
183
|
std::vector<uint8_t> data,
|
|
198
|
-
size_t offset)
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
std::copy(data.begin(), data.end(), dataBlock + offset);
|
|
184
|
+
size_t offset) {
|
|
185
|
+
uint8_t *dataBlock = buffer.data(runtime);
|
|
186
|
+
size_t blockSize = buffer.size(runtime);
|
|
187
|
+
if (data.size() > blockSize) {
|
|
188
|
+
throw jsi::JSError(runtime, "ArrayBuffer is to small to fit data");
|
|
189
|
+
}
|
|
190
|
+
std::copy(data.begin(), data.end(), dataBlock + offset);
|
|
207
191
|
}
|
|
208
192
|
|
|
209
193
|
template <TypedArrayKind T>
|
|
210
|
-
TypedArray<T>::TypedArray(jsi::Runtime &runtime, size_t size) : TypedArrayBase(runtime, size, T){}
|
|
194
|
+
TypedArray<T>::TypedArray(jsi::Runtime &runtime, size_t size) : TypedArrayBase(runtime, size, T) {}
|
|
211
195
|
|
|
212
196
|
template <TypedArrayKind T>
|
|
213
197
|
TypedArray<T>::TypedArray(jsi::Runtime &runtime, std::vector<ContentType<T>> data)
|
|
214
|
-
: TypedArrayBase(runtime, data.size(), T)
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
};
|
|
198
|
+
: TypedArrayBase(runtime, data.size(), T) {
|
|
199
|
+
update(runtime, data);
|
|
200
|
+
}
|
|
218
201
|
|
|
219
202
|
template <TypedArrayKind T>
|
|
220
203
|
TypedArray<T>::TypedArray(TypedArrayBase &&base) : TypedArrayBase(std::move(base)) {}
|
|
221
204
|
|
|
222
205
|
template <TypedArrayKind T>
|
|
223
|
-
std::vector<ContentType<T>> TypedArray<T>::toVector(jsi::Runtime &runtime)
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
return std::vector<ContentType<T>>(start, end);
|
|
206
|
+
std::vector<ContentType<T>> TypedArray<T>::toVector(jsi::Runtime &runtime) {
|
|
207
|
+
auto start =
|
|
208
|
+
reinterpret_cast<ContentType<T> *>(getBuffer(runtime).data(runtime) + byteOffset(runtime));
|
|
209
|
+
auto end = start + size(runtime);
|
|
210
|
+
return std::vector<ContentType<T>>(start, end);
|
|
229
211
|
}
|
|
230
212
|
|
|
231
213
|
template <TypedArrayKind T>
|
|
232
|
-
void TypedArray<T>::update(jsi::Runtime &runtime, const std::vector<ContentType<T>> &data)
|
|
233
|
-
{
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
214
|
+
void TypedArray<T>::update(jsi::Runtime &runtime, const std::vector<ContentType<T>> &data) {
|
|
215
|
+
if (data.size() != size(runtime)) {
|
|
216
|
+
throw jsi::JSError(runtime, "TypedArray can only be updated with a vector of the same size");
|
|
217
|
+
}
|
|
218
|
+
uint8_t *rawData = getBuffer(runtime).data(runtime) + byteOffset(runtime);
|
|
219
|
+
std::copy(data.begin(), data.end(), reinterpret_cast<ContentType<T> *>(rawData));
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
template <TypedArrayKind T>
|
|
223
|
+
void TypedArray<T>::updateUnsafe(jsi::Runtime &runtime, ContentType<T> *data, size_t length) {
|
|
224
|
+
if (length != size(runtime)) {
|
|
225
|
+
throw jsi::JSError(runtime, "TypedArray can only be updated with an array of the same size");
|
|
226
|
+
}
|
|
227
|
+
uint8_t *rawData = getBuffer(runtime).data(runtime) + byteOffset(runtime);
|
|
228
|
+
memcpy(rawData, data, length);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
template <TypedArrayKind T>
|
|
232
|
+
uint8_t* TypedArray<T>::data(jsi::Runtime &runtime) {
|
|
233
|
+
return getBuffer(runtime).data(runtime) + byteOffset(runtime);
|
|
240
234
|
}
|
|
241
235
|
|
|
242
236
|
const jsi::PropNameID &PropNameIDCache::getConstructorNameProp(
|
|
243
237
|
jsi::Runtime &runtime,
|
|
244
|
-
TypedArrayKind kind)
|
|
245
|
-
{
|
|
246
|
-
switch (kind)
|
|
247
|
-
{
|
|
238
|
+
TypedArrayKind kind) {
|
|
239
|
+
switch (kind) {
|
|
248
240
|
case TypedArrayKind::Int8Array:
|
|
249
|
-
|
|
241
|
+
return get(runtime, Prop::Int8Array);
|
|
250
242
|
case TypedArrayKind::Int16Array:
|
|
251
|
-
|
|
243
|
+
return get(runtime, Prop::Int16Array);
|
|
252
244
|
case TypedArrayKind::Int32Array:
|
|
253
|
-
|
|
245
|
+
return get(runtime, Prop::Int32Array);
|
|
254
246
|
case TypedArrayKind::Uint8Array:
|
|
255
|
-
|
|
247
|
+
return get(runtime, Prop::Uint8Array);
|
|
256
248
|
case TypedArrayKind::Uint8ClampedArray:
|
|
257
|
-
|
|
249
|
+
return get(runtime, Prop::Uint8ClampedArray);
|
|
258
250
|
case TypedArrayKind::Uint16Array:
|
|
259
|
-
|
|
251
|
+
return get(runtime, Prop::Uint16Array);
|
|
260
252
|
case TypedArrayKind::Uint32Array:
|
|
261
|
-
|
|
253
|
+
return get(runtime, Prop::Uint32Array);
|
|
262
254
|
case TypedArrayKind::Float32Array:
|
|
263
|
-
|
|
255
|
+
return get(runtime, Prop::Float32Array);
|
|
264
256
|
case TypedArrayKind::Float64Array:
|
|
265
|
-
|
|
266
|
-
|
|
257
|
+
return get(runtime, Prop::Float64Array);
|
|
258
|
+
}
|
|
267
259
|
}
|
|
268
260
|
|
|
269
|
-
jsi::PropNameID PropNameIDCache::createProp(jsi::Runtime &runtime, Prop prop)
|
|
270
|
-
{
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
};
|
|
275
|
-
switch (prop)
|
|
276
|
-
{
|
|
261
|
+
jsi::PropNameID PropNameIDCache::createProp(jsi::Runtime &runtime, Prop prop) {
|
|
262
|
+
auto create = [&](const std::string &propName) {
|
|
263
|
+
return jsi::PropNameID::forUtf8(runtime, propName);
|
|
264
|
+
};
|
|
265
|
+
switch (prop) {
|
|
277
266
|
case Prop::Buffer:
|
|
278
|
-
|
|
267
|
+
return create("buffer");
|
|
279
268
|
case Prop::Constructor:
|
|
280
|
-
|
|
269
|
+
return create("constructor");
|
|
281
270
|
case Prop::Name:
|
|
282
|
-
|
|
271
|
+
return create("name");
|
|
283
272
|
case Prop::Proto:
|
|
284
|
-
|
|
273
|
+
return create("__proto__");
|
|
285
274
|
case Prop::Length:
|
|
286
|
-
|
|
275
|
+
return create("length");
|
|
287
276
|
case Prop::ByteLength:
|
|
288
|
-
|
|
277
|
+
return create("byteLength");
|
|
289
278
|
case Prop::ByteOffset:
|
|
290
|
-
|
|
279
|
+
return create("byteOffset");
|
|
291
280
|
case Prop::IsView:
|
|
292
|
-
|
|
281
|
+
return create("isView");
|
|
293
282
|
case Prop::ArrayBuffer:
|
|
294
|
-
|
|
283
|
+
return create("ArrayBuffer");
|
|
295
284
|
case Prop::Int8Array:
|
|
296
|
-
|
|
285
|
+
return create("Int8Array");
|
|
297
286
|
case Prop::Int16Array:
|
|
298
|
-
|
|
287
|
+
return create("Int16Array");
|
|
299
288
|
case Prop::Int32Array:
|
|
300
|
-
|
|
289
|
+
return create("Int32Array");
|
|
301
290
|
case Prop::Uint8Array:
|
|
302
|
-
|
|
291
|
+
return create("Uint8Array");
|
|
303
292
|
case Prop::Uint8ClampedArray:
|
|
304
|
-
|
|
293
|
+
return create("Uint8ClampedArray");
|
|
305
294
|
case Prop::Uint16Array:
|
|
306
|
-
|
|
295
|
+
return create("Uint16Array");
|
|
307
296
|
case Prop::Uint32Array:
|
|
308
|
-
|
|
297
|
+
return create("Uint32Array");
|
|
309
298
|
case Prop::Float32Array:
|
|
310
|
-
|
|
299
|
+
return create("Float32Array");
|
|
311
300
|
case Prop::Float64Array:
|
|
312
|
-
|
|
313
|
-
|
|
301
|
+
return create("Float64Array");
|
|
302
|
+
}
|
|
314
303
|
}
|
|
315
304
|
|
|
316
305
|
std::unordered_map<std::string, TypedArrayKind> nameToKindMap = {
|
|
@@ -325,9 +314,8 @@ std::unordered_map<std::string, TypedArrayKind> nameToKindMap = {
|
|
|
325
314
|
{"Float64Array", TypedArrayKind::Float64Array},
|
|
326
315
|
};
|
|
327
316
|
|
|
328
|
-
TypedArrayKind getTypedArrayKindForName(const std::string &name)
|
|
329
|
-
|
|
330
|
-
return nameToKindMap.at(name);
|
|
317
|
+
TypedArrayKind getTypedArrayKindForName(const std::string &name) {
|
|
318
|
+
return nameToKindMap.at(name);
|
|
331
319
|
}
|
|
332
320
|
|
|
333
321
|
template class TypedArray<TypedArrayKind::Int8Array>;
|
package/cpp/TypedArray.h
CHANGED
|
@@ -9,20 +9,21 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include <jsi/jsi.h>
|
|
12
|
+
#include <utility>
|
|
13
|
+
#include <vector>
|
|
12
14
|
|
|
13
15
|
namespace jsi = facebook::jsi;
|
|
14
16
|
|
|
15
|
-
enum class TypedArrayKind
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
Float64Array,
|
|
17
|
+
enum class TypedArrayKind {
|
|
18
|
+
Int8Array,
|
|
19
|
+
Int16Array,
|
|
20
|
+
Int32Array,
|
|
21
|
+
Uint8Array,
|
|
22
|
+
Uint8ClampedArray,
|
|
23
|
+
Uint16Array,
|
|
24
|
+
Uint32Array,
|
|
25
|
+
Float32Array,
|
|
26
|
+
Float64Array,
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
template <TypedArrayKind T>
|
|
@@ -31,87 +32,94 @@ class TypedArray;
|
|
|
31
32
|
template <TypedArrayKind T>
|
|
32
33
|
struct typedArrayTypeMap;
|
|
33
34
|
template <>
|
|
34
|
-
struct typedArrayTypeMap<TypedArrayKind::Int8Array>
|
|
35
|
-
|
|
36
|
-
typedef int8_t type;
|
|
35
|
+
struct typedArrayTypeMap<TypedArrayKind::Int8Array> {
|
|
36
|
+
typedef int8_t type;
|
|
37
37
|
};
|
|
38
38
|
template <>
|
|
39
|
-
struct typedArrayTypeMap<TypedArrayKind::Int16Array>
|
|
40
|
-
|
|
41
|
-
typedef int16_t type;
|
|
39
|
+
struct typedArrayTypeMap<TypedArrayKind::Int16Array> {
|
|
40
|
+
typedef int16_t type;
|
|
42
41
|
};
|
|
43
42
|
template <>
|
|
44
|
-
struct typedArrayTypeMap<TypedArrayKind::Int32Array>
|
|
45
|
-
|
|
46
|
-
typedef int32_t type;
|
|
43
|
+
struct typedArrayTypeMap<TypedArrayKind::Int32Array> {
|
|
44
|
+
typedef int32_t type;
|
|
47
45
|
};
|
|
48
46
|
template <>
|
|
49
|
-
struct typedArrayTypeMap<TypedArrayKind::Uint8Array>
|
|
50
|
-
|
|
51
|
-
typedef uint8_t type;
|
|
47
|
+
struct typedArrayTypeMap<TypedArrayKind::Uint8Array> {
|
|
48
|
+
typedef uint8_t type;
|
|
52
49
|
};
|
|
53
50
|
template <>
|
|
54
|
-
struct typedArrayTypeMap<TypedArrayKind::Uint8ClampedArray>
|
|
55
|
-
|
|
56
|
-
typedef uint8_t type;
|
|
51
|
+
struct typedArrayTypeMap<TypedArrayKind::Uint8ClampedArray> {
|
|
52
|
+
typedef uint8_t type;
|
|
57
53
|
};
|
|
58
54
|
template <>
|
|
59
|
-
struct typedArrayTypeMap<TypedArrayKind::Uint16Array>
|
|
60
|
-
|
|
61
|
-
typedef uint16_t type;
|
|
55
|
+
struct typedArrayTypeMap<TypedArrayKind::Uint16Array> {
|
|
56
|
+
typedef uint16_t type;
|
|
62
57
|
};
|
|
63
58
|
template <>
|
|
64
|
-
struct typedArrayTypeMap<TypedArrayKind::Uint32Array>
|
|
65
|
-
|
|
66
|
-
typedef uint32_t type;
|
|
59
|
+
struct typedArrayTypeMap<TypedArrayKind::Uint32Array> {
|
|
60
|
+
typedef uint32_t type;
|
|
67
61
|
};
|
|
68
62
|
template <>
|
|
69
|
-
struct typedArrayTypeMap<TypedArrayKind::Float32Array>
|
|
70
|
-
|
|
71
|
-
typedef float type;
|
|
63
|
+
struct typedArrayTypeMap<TypedArrayKind::Float32Array> {
|
|
64
|
+
typedef float type;
|
|
72
65
|
};
|
|
73
66
|
template <>
|
|
74
|
-
struct typedArrayTypeMap<TypedArrayKind::Float64Array>
|
|
75
|
-
|
|
76
|
-
typedef double type;
|
|
67
|
+
struct typedArrayTypeMap<TypedArrayKind::Float64Array> {
|
|
68
|
+
typedef double type;
|
|
77
69
|
};
|
|
78
70
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
{
|
|
83
|
-
public:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
71
|
+
// Instance of this class will invalidate PropNameIDCache when destructor is called.
|
|
72
|
+
// Attach this object to global in specific jsi::Runtime to make sure lifecycle of
|
|
73
|
+
// the cache object is connected to the lifecycle of the js runtime
|
|
74
|
+
class InvalidateCacheOnDestroy : public jsi::HostObject {
|
|
75
|
+
public:
|
|
76
|
+
explicit InvalidateCacheOnDestroy(jsi::Runtime &runtime);
|
|
77
|
+
virtual ~InvalidateCacheOnDestroy();
|
|
78
|
+
virtual jsi::Value get(jsi::Runtime &, const jsi::PropNameID &name) {
|
|
79
|
+
return jsi::Value::null();
|
|
80
|
+
}
|
|
81
|
+
virtual void set(jsi::Runtime &, const jsi::PropNameID &name, const jsi::Value &value) {}
|
|
82
|
+
virtual std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) {
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private:
|
|
87
|
+
uintptr_t key;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
class TypedArrayBase : public jsi::Object {
|
|
91
|
+
public:
|
|
92
|
+
template <TypedArrayKind T>
|
|
93
|
+
using ContentType = typename typedArrayTypeMap<T>::type;
|
|
94
|
+
|
|
95
|
+
TypedArrayBase(jsi::Runtime &, size_t, TypedArrayKind);
|
|
96
|
+
TypedArrayBase(jsi::Runtime &, const jsi::Object &);
|
|
97
|
+
TypedArrayBase(TypedArrayBase &&) = default;
|
|
98
|
+
TypedArrayBase &operator=(TypedArrayBase &&) = default;
|
|
99
|
+
|
|
100
|
+
TypedArrayKind getKind(jsi::Runtime &runtime) const;
|
|
101
|
+
|
|
102
|
+
template <TypedArrayKind T>
|
|
103
|
+
TypedArray<T> get(jsi::Runtime &runtime) const &;
|
|
104
|
+
template <TypedArrayKind T>
|
|
105
|
+
TypedArray<T> get(jsi::Runtime &runtime) &&;
|
|
106
|
+
template <TypedArrayKind T>
|
|
107
|
+
TypedArray<T> as(jsi::Runtime &runtime) const &;
|
|
108
|
+
template <TypedArrayKind T>
|
|
109
|
+
TypedArray<T> as(jsi::Runtime &runtime) &&;
|
|
110
|
+
|
|
111
|
+
size_t size(jsi::Runtime &runtime) const;
|
|
112
|
+
size_t length(jsi::Runtime &runtime) const;
|
|
113
|
+
size_t byteLength(jsi::Runtime &runtime) const;
|
|
114
|
+
size_t byteOffset(jsi::Runtime &runtime) const;
|
|
115
|
+
bool hasBuffer(jsi::Runtime &runtime) const;
|
|
116
|
+
|
|
117
|
+
std::vector<uint8_t> toVector(jsi::Runtime &runtime);
|
|
118
|
+
jsi::ArrayBuffer getBuffer(jsi::Runtime &runtime) const;
|
|
119
|
+
|
|
120
|
+
private:
|
|
121
|
+
template <TypedArrayKind>
|
|
122
|
+
friend class TypedArray;
|
|
115
123
|
};
|
|
116
124
|
|
|
117
125
|
bool isTypedArray(jsi::Runtime &runtime, const jsi::Object &jsObj);
|
|
@@ -125,51 +133,46 @@ void arrayBufferUpdate(
|
|
|
125
133
|
size_t offset);
|
|
126
134
|
|
|
127
135
|
template <TypedArrayKind T>
|
|
128
|
-
class TypedArray : public TypedArrayBase
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
class TypedArray : public TypedArrayBase {
|
|
137
|
+
public:
|
|
138
|
+
explicit TypedArray(TypedArrayBase &&base);
|
|
139
|
+
TypedArray(jsi::Runtime &runtime, size_t size);
|
|
140
|
+
TypedArray(jsi::Runtime &runtime, std::vector<ContentType<T>> data);
|
|
141
|
+
TypedArray(TypedArray &&) = default;
|
|
142
|
+
TypedArray &operator=(TypedArray &&) = default;
|
|
143
|
+
|
|
144
|
+
std::vector<ContentType<T>> toVector(jsi::Runtime &runtime);
|
|
145
|
+
void update(jsi::Runtime &runtime, const std::vector<ContentType<T>> &data);
|
|
146
|
+
void updateUnsafe(jsi::Runtime &runtime, ContentType<T> *data, size_t length);
|
|
147
|
+
uint8_t* data(jsi::Runtime &runtime);
|
|
139
148
|
};
|
|
140
149
|
|
|
141
150
|
template <TypedArrayKind T>
|
|
142
|
-
TypedArray<T> TypedArrayBase::get(jsi::Runtime &runtime) const &
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return TypedArray<T>(jsi::Value(runtime, jsi::Value(runtime, *this).asObject(runtime)));
|
|
151
|
+
TypedArray<T> TypedArrayBase::get(jsi::Runtime &runtime) const & {
|
|
152
|
+
assert(getKind(runtime) == T);
|
|
153
|
+
(void)runtime; // when assert is disabled we need to mark this as used
|
|
154
|
+
return TypedArray<T>(jsi::Value(runtime, jsi::Value(runtime, *this).asObject(runtime)));
|
|
147
155
|
}
|
|
148
156
|
|
|
149
157
|
template <TypedArrayKind T>
|
|
150
|
-
TypedArray<T> TypedArrayBase::get(jsi::Runtime &runtime) &&
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return TypedArray<T>(std::move(*this));
|
|
158
|
+
TypedArray<T> TypedArrayBase::get(jsi::Runtime &runtime) && {
|
|
159
|
+
assert(getKind(runtime) == T);
|
|
160
|
+
(void)runtime; // when assert is disabled we need to mark this as used
|
|
161
|
+
return TypedArray<T>(std::move(*this));
|
|
155
162
|
}
|
|
156
163
|
|
|
157
164
|
template <TypedArrayKind T>
|
|
158
|
-
TypedArray<T> TypedArrayBase::as(jsi::Runtime &runtime) const &
|
|
159
|
-
{
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
return get<T>(runtime);
|
|
165
|
+
TypedArray<T> TypedArrayBase::as(jsi::Runtime &runtime) const & {
|
|
166
|
+
if (getKind(runtime) != T) {
|
|
167
|
+
throw jsi::JSError(runtime, "Object is not a TypedArray");
|
|
168
|
+
}
|
|
169
|
+
return get<T>(runtime);
|
|
165
170
|
}
|
|
166
171
|
|
|
167
172
|
template <TypedArrayKind T>
|
|
168
|
-
TypedArray<T> TypedArrayBase::as(jsi::Runtime &runtime) &&
|
|
169
|
-
{
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
return std::move(*this).get<T>(runtime);
|
|
173
|
+
TypedArray<T> TypedArrayBase::as(jsi::Runtime &runtime) && {
|
|
174
|
+
if (getKind(runtime) != T) {
|
|
175
|
+
throw jsi::JSError(runtime, "Object is not a TypedArray");
|
|
176
|
+
}
|
|
177
|
+
return std::move(*this).get<T>(runtime);
|
|
175
178
|
}
|
package/ios/JSIUtils.mm
CHANGED
|
@@ -80,7 +80,8 @@ id convertJSIValueToObjCObject(jsi::Runtime &runtime, const jsi::Value &value);
|
|
|
80
80
|
|
|
81
81
|
NSString *convertJSIStringToNSString(jsi::Runtime &runtime, const jsi::String &value)
|
|
82
82
|
{
|
|
83
|
-
|
|
83
|
+
auto string = value.utf8(runtime);
|
|
84
|
+
return [NSString stringWithUTF8String:string.c_str()];
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
NSArray *convertJSIArrayToNSArray(jsi::Runtime &runtime,
|
package/ios/MmkvModule.mm
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#import <MMKV/MMKV.h>
|
|
9
9
|
#import "MmkvHostObject.h"
|
|
10
|
+
#import "../cpp/TypedArray.h"
|
|
10
11
|
|
|
11
12
|
using namespace facebook;
|
|
12
13
|
|
|
@@ -31,19 +32,19 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install:(nullable NSString*)storageDirect
|
|
|
31
32
|
if (cxxBridge == nil) {
|
|
32
33
|
return @false;
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
+
|
|
35
36
|
using namespace facebook;
|
|
36
|
-
|
|
37
|
+
|
|
37
38
|
auto jsiRuntime = (jsi::Runtime*) cxxBridge.runtime;
|
|
38
39
|
if (jsiRuntime == nil) {
|
|
39
40
|
return @false;
|
|
40
41
|
}
|
|
41
42
|
auto& runtime = *jsiRuntime;
|
|
42
|
-
|
|
43
|
+
|
|
43
44
|
RCTUnsafeExecuteOnMainQueueSync(^{
|
|
44
45
|
[MMKV initializeMMKV:storageDirectory];
|
|
45
46
|
});
|
|
46
|
-
|
|
47
|
+
|
|
47
48
|
// MMKV.createNewInstance()
|
|
48
49
|
auto mmkvCreateNewInstance = jsi::Function::createFromHostFunction(runtime,
|
|
49
50
|
jsi::PropNameID::forAscii(runtime, "mmkvCreateNewInstance"),
|
|
@@ -56,16 +57,20 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install:(nullable NSString*)storageDirect
|
|
|
56
57
|
throw jsi::JSError(runtime, "MMKV.createNewInstance(..) expects one argument (object)!");
|
|
57
58
|
}
|
|
58
59
|
jsi::Object config = arguments[0].asObject(runtime);
|
|
59
|
-
|
|
60
|
+
|
|
60
61
|
NSString* instanceId = [MmkvModule getPropertyAsStringOrNilFromObject:config propertyName:"id" runtime:runtime];
|
|
61
62
|
NSString* path = [MmkvModule getPropertyAsStringOrNilFromObject:config propertyName:"path" runtime:runtime];
|
|
62
63
|
NSString* encryptionKey = [MmkvModule getPropertyAsStringOrNilFromObject:config propertyName:"encryptionKey" runtime:runtime];
|
|
63
|
-
|
|
64
|
+
|
|
64
65
|
auto instance = std::make_shared<MmkvHostObject>(instanceId, path, encryptionKey);
|
|
65
66
|
return jsi::Object::createFromHostObject(runtime, instance);
|
|
66
67
|
});
|
|
67
68
|
runtime.global().setProperty(runtime, "mmkvCreateNewInstance", std::move(mmkvCreateNewInstance));
|
|
68
|
-
|
|
69
|
+
|
|
70
|
+
// Adds the PropNameIDCache object to the Runtime. If the Runtime gets destroyed, the Object gets destroyed and the cache gets invalidated.
|
|
71
|
+
auto propNameIdCache = std::make_shared<InvalidateCacheOnDestroy>(runtime);
|
|
72
|
+
runtime.global().setProperty(runtime, "mmkvArrayBufferPropNameIdCache", jsi::Object::createFromHostObject(runtime, propNameIdCache));
|
|
73
|
+
|
|
69
74
|
NSLog(@"Installed global.mmkvCreateNewInstance!");
|
|
70
75
|
return @true;
|
|
71
76
|
}
|
package/lib/commonjs/hooks.js
CHANGED
|
@@ -56,6 +56,13 @@ function createMMKVHook(getter) {
|
|
|
56
56
|
case 'undefined':
|
|
57
57
|
mmkv.delete(key);
|
|
58
58
|
break;
|
|
59
|
+
case 'object':
|
|
60
|
+
if (newValue instanceof Uint8Array) {
|
|
61
|
+
mmkv.set(key, newValue);
|
|
62
|
+
break;
|
|
63
|
+
} else {
|
|
64
|
+
throw new Error(`MMKV: Type object (${newValue}) is not supported!`);
|
|
65
|
+
}
|
|
59
66
|
default:
|
|
60
67
|
throw new Error(`MMKV: Type ${typeof newValue} is not supported!`);
|
|
61
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isConfigurationEqual","left","right","encryptionKey","id","path","defaultInstance","getDefaultInstance","MMKV","useMMKV","configuration","instance","useRef","lastConfiguration","current","createMMKVHook","getter","key","mmkv","value","setValue","useState","valueRef","set","useCallback","v","newValue","delete","Error","useEffect","listener","addOnValueChangedListener","changedKey","remove","useMMKVString","getString","useMMKVNumber","getNumber","useMMKVBoolean","getBoolean","useMMKVBuffer","getBuffer","useMMKVObject","string","setString","useMemo","undefined","JSON","parse","stringify","useMMKVListener","valueChangedListener","ref"],"sourceRoot":"../../src","sources":["hooks.ts"],"mappings":";;;;;;;;;;;AAAA;AACA;AAEA,SAASA,oBAAoB,CAC3BC,IAAwB,EACxBC,KAAyB,EAChB;EACT,IAAID,IAAI,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI,EAAE,OAAOD,IAAI,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI;EAEvE,OACED,IAAI,CAACE,aAAa,KAAKD,KAAK,CAACC,aAAa,IAC1CF,IAAI,CAACG,EAAE,KAAKF,KAAK,CAACE,EAAE,IACpBH,IAAI,CAACI,IAAI,KAAKH,KAAK,CAACG,IAAI;AAE5B;AAEA,IAAIC,eAA4B,GAAG,IAAI;AACvC,SAASC,kBAAkB,GAAS;EAClC,IAAID,eAAe,IAAI,IAAI,EAAE;IAC3BA,eAAe,GAAG,IAAIE,UAAI,EAAE;EAC9B;EACA,OAAOF,eAAe;AACxB;;AAEA;AACA;AACA;;AAOO,SAASG,OAAO,CAACC,aAAiC,EAAQ;EAC/D,MAAMC,QAAQ,GAAG,IAAAC,aAAM,GAAQ;EAC/B,MAAMC,iBAAiB,GAAG,IAAAD,aAAM,GAAqB;EAErD,IAAIF,aAAa,IAAI,IAAI,EAAE,OAAOH,kBAAkB,EAAE;EAEtD,IACEI,QAAQ,CAACG,OAAO,IAAI,IAAI,IACxB,CAACd,oBAAoB,CAACa,iBAAiB,CAACC,OAAO,EAAEJ,aAAa,CAAC,EAC/D;IACAG,iBAAiB,CAACC,OAAO,GAAGJ,aAAa;IACzCC,QAAQ,CAACG,OAAO,GAAG,IAAIN,UAAI,CAACE,aAAa,CAAC;EAC5C;EAEA,OAAOC,QAAQ,CAACG,OAAO;AACzB;AAEA,SAASC,cAAc,CAIrBC,MAA0C,EAAE;EAC5C,OAAO,CACLC,GAAW,EACXN,QAAe,KACuC;IACtD,MAAMO,IAAI,GAAGP,QAAQ,IAAIJ,kBAAkB,EAAE;IAC7C,MAAM,CAACY,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAML,MAAM,CAACE,IAAI,EAAED,GAAG,CAAC,CAAC;IAC3D,MAAMK,QAAQ,GAAG,IAAAV,aAAM,EAAIO,KAAK,CAAC;IACjCG,QAAQ,CAACR,OAAO,GAAGK,KAAK;;IAExB;IACA,MAAMI,GAAG,GAAG,IAAAC,kBAAW,EACpBC,CAAa,IAAK;MACjB,MAAMC,QAAQ,GAAG,OAAOD,CAAC,KAAK,UAAU,GAAGA,CAAC,CAACH,QAAQ,CAACR,OAAO,CAAC,GAAGW,CAAC;MAClE,QAAQ,OAAOC,QAAQ;QACrB,KAAK,QAAQ;QACb,KAAK,QAAQ;QACb,KAAK,SAAS;UACZR,IAAI,CAACK,GAAG,CAACN,GAAG,EAAES,QAAQ,CAAC;UACvB;QACF,KAAK,WAAW;UACdR,IAAI,CAACS,MAAM,CAACV,GAAG,CAAC;UAChB;QACF;UACE,MAAM,
|
|
1
|
+
{"version":3,"names":["isConfigurationEqual","left","right","encryptionKey","id","path","defaultInstance","getDefaultInstance","MMKV","useMMKV","configuration","instance","useRef","lastConfiguration","current","createMMKVHook","getter","key","mmkv","value","setValue","useState","valueRef","set","useCallback","v","newValue","delete","Uint8Array","Error","useEffect","listener","addOnValueChangedListener","changedKey","remove","useMMKVString","getString","useMMKVNumber","getNumber","useMMKVBoolean","getBoolean","useMMKVBuffer","getBuffer","useMMKVObject","string","setString","useMemo","undefined","JSON","parse","stringify","useMMKVListener","valueChangedListener","ref"],"sourceRoot":"../../src","sources":["hooks.ts"],"mappings":"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"}
|
package/lib/module/hooks.js
CHANGED
|
@@ -45,6 +45,13 @@ function createMMKVHook(getter) {
|
|
|
45
45
|
case 'undefined':
|
|
46
46
|
mmkv.delete(key);
|
|
47
47
|
break;
|
|
48
|
+
case 'object':
|
|
49
|
+
if (newValue instanceof Uint8Array) {
|
|
50
|
+
mmkv.set(key, newValue);
|
|
51
|
+
break;
|
|
52
|
+
} else {
|
|
53
|
+
throw new Error(`MMKV: Type object (${newValue}) is not supported!`);
|
|
54
|
+
}
|
|
48
55
|
default:
|
|
49
56
|
throw new Error(`MMKV: Type ${typeof newValue} is not supported!`);
|
|
50
57
|
}
|
package/lib/module/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useRef","useState","useMemo","useCallback","useEffect","MMKV","isConfigurationEqual","left","right","encryptionKey","id","path","defaultInstance","getDefaultInstance","useMMKV","configuration","instance","lastConfiguration","current","createMMKVHook","getter","key","mmkv","value","setValue","valueRef","set","v","newValue","delete","Error","listener","addOnValueChangedListener","changedKey","remove","useMMKVString","getString","useMMKVNumber","getNumber","useMMKVBoolean","getBoolean","useMMKVBuffer","getBuffer","useMMKVObject","string","setString","undefined","JSON","parse","stringify","useMMKVListener","valueChangedListener","ref"],"sourceRoot":"../../src","sources":["hooks.ts"],"mappings":"AAAA,SAASA,MAAM,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,WAAW,EAAEC,SAAS,QAAQ,OAAO;AACzE,SAASC,IAAI,QAA2B,QAAQ;AAEhD,SAASC,oBAAoB,CAC3BC,IAAwB,EACxBC,KAAyB,EAChB;EACT,IAAID,IAAI,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI,EAAE,OAAOD,IAAI,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI;EAEvE,OACED,IAAI,CAACE,aAAa,KAAKD,KAAK,CAACC,aAAa,IAC1CF,IAAI,CAACG,EAAE,KAAKF,KAAK,CAACE,EAAE,IACpBH,IAAI,CAACI,IAAI,KAAKH,KAAK,CAACG,IAAI;AAE5B;AAEA,IAAIC,eAA4B,GAAG,IAAI;AACvC,SAASC,kBAAkB,GAAS;EAClC,IAAID,eAAe,IAAI,IAAI,EAAE;IAC3BA,eAAe,GAAG,IAAIP,IAAI,EAAE;EAC9B;EACA,OAAOO,eAAe;AACxB;;AAEA;AACA;AACA;;AAOA,OAAO,SAASE,OAAO,CAACC,aAAiC,EAAQ;EAC/D,MAAMC,QAAQ,GAAGhB,MAAM,EAAQ;EAC/B,MAAMiB,iBAAiB,GAAGjB,MAAM,EAAqB;EAErD,IAAIe,aAAa,IAAI,IAAI,EAAE,OAAOF,kBAAkB,EAAE;EAEtD,IACEG,QAAQ,CAACE,OAAO,IAAI,IAAI,IACxB,CAACZ,oBAAoB,CAACW,iBAAiB,CAACC,OAAO,EAAEH,aAAa,CAAC,EAC/D;IACAE,iBAAiB,CAACC,OAAO,GAAGH,aAAa;IACzCC,QAAQ,CAACE,OAAO,GAAG,IAAIb,IAAI,CAACU,aAAa,CAAC;EAC5C;EAEA,OAAOC,QAAQ,CAACE,OAAO;AACzB;AAEA,SAASC,cAAc,CAIrBC,MAA0C,EAAE;EAC5C,OAAO,CACLC,GAAW,EACXL,QAAe,KACuC;IACtD,MAAMM,IAAI,GAAGN,QAAQ,IAAIH,kBAAkB,EAAE;IAC7C,MAAM,CAACU,KAAK,EAAEC,QAAQ,CAAC,GAAGvB,QAAQ,CAAC,MAAMmB,MAAM,CAACE,IAAI,EAAED,GAAG,CAAC,CAAC;IAC3D,MAAMI,QAAQ,GAAGzB,MAAM,CAAIuB,KAAK,CAAC;IACjCE,QAAQ,CAACP,OAAO,GAAGK,KAAK;;IAExB;IACA,MAAMG,GAAG,GAAGvB,WAAW,CACpBwB,CAAa,IAAK;MACjB,MAAMC,QAAQ,GAAG,OAAOD,CAAC,KAAK,UAAU,GAAGA,CAAC,CAACF,QAAQ,CAACP,OAAO,CAAC,GAAGS,CAAC;MAClE,QAAQ,OAAOC,QAAQ;QACrB,KAAK,QAAQ;QACb,KAAK,QAAQ;QACb,KAAK,SAAS;UACZN,IAAI,CAACI,GAAG,CAACL,GAAG,EAAEO,QAAQ,CAAC;UACvB;QACF,KAAK,WAAW;UACdN,IAAI,CAACO,MAAM,CAACR,GAAG,CAAC;UAChB;QACF;UACE,MAAM,
|
|
1
|
+
{"version":3,"names":["useRef","useState","useMemo","useCallback","useEffect","MMKV","isConfigurationEqual","left","right","encryptionKey","id","path","defaultInstance","getDefaultInstance","useMMKV","configuration","instance","lastConfiguration","current","createMMKVHook","getter","key","mmkv","value","setValue","valueRef","set","v","newValue","delete","Uint8Array","Error","listener","addOnValueChangedListener","changedKey","remove","useMMKVString","getString","useMMKVNumber","getNumber","useMMKVBoolean","getBoolean","useMMKVBuffer","getBuffer","useMMKVObject","string","setString","undefined","JSON","parse","stringify","useMMKVListener","valueChangedListener","ref"],"sourceRoot":"../../src","sources":["hooks.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAuBjD;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAAC;AAChC;;;GAGG;AACH,wBAAgB,OAAO,CAAC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAuBjD;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAAC;AAChC;;;GAGG;AACH,wBAAgB,OAAO,CAAC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;AA8EhE;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QAhEjB,MAAM,aACA,IAAI,kIAC8B,IAAI,CAgEpD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QA9EjB,MAAM,aACA,IAAI,kIAC8B,IAAI,CA8EpD,CAAC;AACF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QA3FlB,MAAM,aACA,IAAI,sIAC8B,IAAI,CA2FpD,CAAC;AACF;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QAxGjB,MAAM,aACA,IAAI,kJAC8B,IAAI,CAwGpD,CAAC;AACF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,IAAI,GACd,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC,CAqBlE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,oBAAoB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC3C,QAAQ,CAAC,EAAE,IAAI,GACd,IAAI,CAYN"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-mmkv",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.3",
|
|
4
4
|
"description": "The fastest key/value storage for React Native. ~30x faster than AsyncStorage! Works on Android, iOS and Web.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -29,8 +29,7 @@
|
|
|
29
29
|
"typescript": "tsc --noEmit",
|
|
30
30
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
31
31
|
"lint-ci": "yarn lint -f ./node_modules/@firmnav/eslint-github-actions-formatter/dist/formatter.js",
|
|
32
|
-
"prepare": "git submodule update --init --recursive",
|
|
33
|
-
"build": "bob build",
|
|
32
|
+
"prepare": "git submodule update --init --recursive && bob build",
|
|
34
33
|
"prepack": "bob build",
|
|
35
34
|
"update-submodule": "git submodule update --remote --merge",
|
|
36
35
|
"release": "release-it",
|
|
@@ -165,5 +164,10 @@
|
|
|
165
164
|
}
|
|
166
165
|
]
|
|
167
166
|
]
|
|
167
|
+
},
|
|
168
|
+
"codegenConfig": {
|
|
169
|
+
"name": "reactnativemmkv",
|
|
170
|
+
"type": "modules",
|
|
171
|
+
"jsSrcsDir": "./lib/module"
|
|
168
172
|
}
|
|
169
173
|
}
|