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.
@@ -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
@@ -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()
@@ -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) {
@@ -34,7 +34,7 @@
34
34
  #include <vector>
35
35
  #include <unordered_map>
36
36
 
37
- constexpr auto MMKV_VERSION = "v1.2.14";
37
+ constexpr auto MMKV_VERSION = "v1.2.15";
38
38
 
39
39
  #ifdef DEBUG
40
40
  # define MMKV_DEBUG
@@ -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
@@ -92,6 +92,7 @@ android {
92
92
  "META-INF",
93
93
  "META-INF/**",
94
94
  "**/libjsi.so",
95
+ "**/libc++_shared.so"
95
96
  ]
96
97
  }
97
98
  }
@@ -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) {
@@ -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
- Buffer, // "buffer"
19
- Constructor, // "constructor"
20
- Name, // "name"
21
- Proto, // "__proto__"
22
- Length, // "length"
23
- ByteLength, // "byteLength"
24
- ByteOffset, // "offset"
25
- IsView, // "isView"
26
- ArrayBuffer, // "ArrayBuffer"
27
- Int8Array, // "Int8Array"
28
- Int16Array, // "Int16Array"
29
- Int32Array, // "Int32Array"
30
- Uint8Array, // "Uint8Array"
31
- Uint8ClampedArray, // "Uint8ClampedArray"
32
- Uint16Array, // "Uint16Array"
33
- Uint32Array, // "Uint32Array"
34
- Float32Array, // "Float32Array"
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
- public:
41
- const jsi::PropNameID &get(jsi::Runtime &runtime, Prop prop)
42
- {
43
- if (!this->props[prop])
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
- const jsi::PropNameID &getConstructorNameProp(jsi::Runtime &runtime, TypedArrayKind kind);
55
+ const jsi::PropNameID &getConstructorNameProp(jsi::Runtime &runtime, TypedArrayKind kind);
51
56
 
52
- void invalidate()
53
- {
54
- props.erase(props.begin(), props.end());
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
- std::unordered_map<Prop, std::unique_ptr<jsi::PropNameID>> props;
63
+ private:
64
+ std::unordered_map<uintptr_t, std::unordered_map<Prop, std::unique_ptr<jsi::PropNameID>>> props;
59
65
 
60
- jsi::PropNameID createProp(jsi::Runtime &runtime, Prop prop);
66
+ jsi::PropNameID createProp(jsi::Runtime &runtime, Prop prop);
61
67
  };
62
68
 
63
69
  PropNameIDCache propNameIDCache;
64
70
 
65
- void invalidateJsiPropNameIDCache()
66
- {
67
- propNameIDCache.invalidate();
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
- auto constructorName = this->getProperty(runtime, propNameIDCache.get(runtime, Prop::Constructor))
88
- .asObject(runtime)
89
- .getProperty(runtime, propNameIDCache.get(runtime, Prop::Name))
90
- .asString(runtime)
91
- .utf8(runtime);
92
- return getTypedArrayKindForName(constructorName);
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
- auto buffer = getProperty(runtime, propNameIDCache.get(runtime, Prop::Buffer));
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
- auto start =
124
- reinterpret_cast<uint8_t *>(getBuffer(runtime).data(runtime) + byteOffset(runtime));
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
- auto buffer = getProperty(runtime, propNameIDCache.get(runtime, Prop::Buffer));
132
- if (buffer.isObject() && buffer.asObject(runtime).isArrayBuffer(runtime))
133
- {
134
- return buffer.asObject(runtime).getArrayBuffer(runtime);
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
- auto jsVal = runtime.global()
145
- .getProperty(runtime, propNameIDCache.get(runtime, Prop::ArrayBuffer))
146
- .asObject(runtime)
147
- .getProperty(runtime, propNameIDCache.get(runtime, Prop::IsView))
148
- .asObject(runtime)
149
- .asFunction(runtime)
150
- .callWithThis(runtime, runtime.global(), {jsi::Value(runtime, jsObj)});
151
- if (jsVal.isBool())
152
- {
153
- return jsVal.getBool();
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
- auto jsVal = runtime.global()
164
- .getProperty(runtime, propNameIDCache.get(runtime, Prop::ArrayBuffer))
165
- .asObject(runtime)
166
- .getProperty(runtime, propNameIDCache.get(runtime, Prop::IsView))
167
- .asObject(runtime)
168
- .asFunction(runtime)
169
- .callWithThis(runtime, runtime.global(), {jsi::Value(runtime, jsObj)});
170
- if (jsVal.isBool())
171
- {
172
- return TypedArrayBase(runtime, jsObj);
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
- if (!jsObj.isArrayBuffer(runtime))
183
- {
184
- throw std::runtime_error("Object is not an ArrayBuffer");
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
- uint8_t *dataBlock = jsArrayBuffer.data(runtime);
189
- size_t blockSize =
190
- jsArrayBuffer.getProperty(runtime, propNameIDCache.get(runtime, Prop::ByteLength)).asNumber();
191
- return std::vector<uint8_t>(dataBlock, dataBlock + blockSize);
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
- uint8_t *dataBlock = buffer.data(runtime);
201
- size_t blockSize = buffer.size(runtime);
202
- if (data.size() > blockSize)
203
- {
204
- throw jsi::JSError(runtime, "ArrayBuffer is to small to fit data");
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
- update(runtime, data);
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
- auto start =
226
- reinterpret_cast<ContentType<T> *>(getBuffer(runtime).data(runtime) + byteOffset(runtime));
227
- auto end = start + size(runtime);
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
- if (data.size() != size(runtime))
235
- {
236
- throw jsi::JSError(runtime, "TypedArray can only be updated with a vector of the same size");
237
- }
238
- uint8_t *rawData = getBuffer(runtime).data(runtime) + byteOffset(runtime);
239
- std::copy(data.begin(), data.end(), reinterpret_cast<ContentType<T> *>(rawData));
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
- return get(runtime, Prop::Int8Array);
241
+ return get(runtime, Prop::Int8Array);
250
242
  case TypedArrayKind::Int16Array:
251
- return get(runtime, Prop::Int16Array);
243
+ return get(runtime, Prop::Int16Array);
252
244
  case TypedArrayKind::Int32Array:
253
- return get(runtime, Prop::Int32Array);
245
+ return get(runtime, Prop::Int32Array);
254
246
  case TypedArrayKind::Uint8Array:
255
- return get(runtime, Prop::Uint8Array);
247
+ return get(runtime, Prop::Uint8Array);
256
248
  case TypedArrayKind::Uint8ClampedArray:
257
- return get(runtime, Prop::Uint8ClampedArray);
249
+ return get(runtime, Prop::Uint8ClampedArray);
258
250
  case TypedArrayKind::Uint16Array:
259
- return get(runtime, Prop::Uint16Array);
251
+ return get(runtime, Prop::Uint16Array);
260
252
  case TypedArrayKind::Uint32Array:
261
- return get(runtime, Prop::Uint32Array);
253
+ return get(runtime, Prop::Uint32Array);
262
254
  case TypedArrayKind::Float32Array:
263
- return get(runtime, Prop::Float32Array);
255
+ return get(runtime, Prop::Float32Array);
264
256
  case TypedArrayKind::Float64Array:
265
- return get(runtime, Prop::Float64Array);
266
- }
257
+ return get(runtime, Prop::Float64Array);
258
+ }
267
259
  }
268
260
 
269
- jsi::PropNameID PropNameIDCache::createProp(jsi::Runtime &runtime, Prop prop)
270
- {
271
- auto create = [&](const std::string &propName)
272
- {
273
- return jsi::PropNameID::forUtf8(runtime, propName);
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
- return create("buffer");
267
+ return create("buffer");
279
268
  case Prop::Constructor:
280
- return create("constructor");
269
+ return create("constructor");
281
270
  case Prop::Name:
282
- return create("name");
271
+ return create("name");
283
272
  case Prop::Proto:
284
- return create("__proto__");
273
+ return create("__proto__");
285
274
  case Prop::Length:
286
- return create("length");
275
+ return create("length");
287
276
  case Prop::ByteLength:
288
- return create("byteLength");
277
+ return create("byteLength");
289
278
  case Prop::ByteOffset:
290
- return create("byteOffset");
279
+ return create("byteOffset");
291
280
  case Prop::IsView:
292
- return create("isView");
281
+ return create("isView");
293
282
  case Prop::ArrayBuffer:
294
- return create("ArrayBuffer");
283
+ return create("ArrayBuffer");
295
284
  case Prop::Int8Array:
296
- return create("Int8Array");
285
+ return create("Int8Array");
297
286
  case Prop::Int16Array:
298
- return create("Int16Array");
287
+ return create("Int16Array");
299
288
  case Prop::Int32Array:
300
- return create("Int32Array");
289
+ return create("Int32Array");
301
290
  case Prop::Uint8Array:
302
- return create("Uint8Array");
291
+ return create("Uint8Array");
303
292
  case Prop::Uint8ClampedArray:
304
- return create("Uint8ClampedArray");
293
+ return create("Uint8ClampedArray");
305
294
  case Prop::Uint16Array:
306
- return create("Uint16Array");
295
+ return create("Uint16Array");
307
296
  case Prop::Uint32Array:
308
- return create("Uint32Array");
297
+ return create("Uint32Array");
309
298
  case Prop::Float32Array:
310
- return create("Float32Array");
299
+ return create("Float32Array");
311
300
  case Prop::Float64Array:
312
- return create("Float64Array");
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
- Int8Array,
18
- Int16Array,
19
- Int32Array,
20
- Uint8Array,
21
- Uint8ClampedArray,
22
- Uint16Array,
23
- Uint32Array,
24
- Float32Array,
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
- void invalidateJsiPropNameIDCache();
80
-
81
- class TypedArrayBase : public jsi::Object
82
- {
83
- public:
84
- template <TypedArrayKind T>
85
- using ContentType = typename typedArrayTypeMap<T>::type;
86
-
87
- TypedArrayBase(jsi::Runtime &, size_t, TypedArrayKind);
88
- TypedArrayBase(jsi::Runtime &, const jsi::Object &);
89
- TypedArrayBase(TypedArrayBase &&) = default;
90
- TypedArrayBase &operator=(TypedArrayBase &&) = default;
91
-
92
- TypedArrayKind getKind(jsi::Runtime &runtime) const;
93
-
94
- template <TypedArrayKind T>
95
- TypedArray<T> get(jsi::Runtime &runtime) const &;
96
- template <TypedArrayKind T>
97
- TypedArray<T> get(jsi::Runtime &runtime) &&;
98
- template <TypedArrayKind T>
99
- TypedArray<T> as(jsi::Runtime &runtime) const &;
100
- template <TypedArrayKind T>
101
- TypedArray<T> as(jsi::Runtime &runtime) &&;
102
-
103
- size_t size(jsi::Runtime &runtime) const;
104
- size_t length(jsi::Runtime &runtime) const;
105
- size_t byteLength(jsi::Runtime &runtime) const;
106
- size_t byteOffset(jsi::Runtime &runtime) const;
107
- bool hasBuffer(jsi::Runtime &runtime) const;
108
-
109
- std::vector<uint8_t> toVector(jsi::Runtime &runtime);
110
- jsi::ArrayBuffer getBuffer(jsi::Runtime &runtime) const;
111
-
112
- private:
113
- template <TypedArrayKind>
114
- friend class TypedArray;
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
- public:
131
- TypedArray(jsi::Runtime &runtime, size_t size);
132
- TypedArray(jsi::Runtime &runtime, std::vector<ContentType<T>> data);
133
- TypedArray(TypedArrayBase &&base);
134
- TypedArray(TypedArray &&) = default;
135
- TypedArray &operator=(TypedArray &&) = default;
136
-
137
- std::vector<ContentType<T>> toVector(jsi::Runtime &runtime);
138
- void update(jsi::Runtime &runtime, const std::vector<ContentType<T>> &data);
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
- assert(getKind(runtime) == T);
145
- (void)runtime; // when assert is disabled we need to mark this as used
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
- assert(getKind(runtime) == T);
153
- (void)runtime; // when assert is disabled we need to mark this as used
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
- if (getKind(runtime) != T)
161
- {
162
- throw jsi::JSError(runtime, "Object is not a TypedArray");
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
- if (getKind(runtime) != T)
171
- {
172
- throw jsi::JSError(runtime, "Object is not a TypedArray");
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
- return [NSString stringWithUTF8String:value.utf8(runtime).c_str()];
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
  }
@@ -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,IAAIW,KAAK,CAAE,cAAa,OAAOF,QAAS,oBAAmB,CAAC;MAAC;IAEzE,CAAC,EACD,CAACT,GAAG,EAAEC,IAAI,CAAC,CACZ;;IAED;IACA,IAAAW,gBAAS,EAAC,MAAM;MACdT,QAAQ,CAACJ,MAAM,CAACE,IAAI,EAAED,GAAG,CAAC,CAAC;IAC7B,CAAC,EAAE,CAACA,GAAG,EAAEC,IAAI,CAAC,CAAC;;IAEf;IACA,IAAAW,gBAAS,EAAC,MAAM;MACd,MAAMC,QAAQ,GAAGZ,IAAI,CAACa,yBAAyB,CAAEC,UAAU,IAAK;QAC9D,IAAIA,UAAU,KAAKf,GAAG,EAAE;UACtBG,QAAQ,CAACJ,MAAM,CAACE,IAAI,EAAED,GAAG,CAAC,CAAC;QAC7B;MACF,CAAC,CAAC;MACF,OAAO,MAAMa,QAAQ,CAACG,MAAM,EAAE;IAChC,CAAC,EAAE,CAAChB,GAAG,EAAEC,IAAI,CAAC,CAAC;IAEf,OAAO,CAACC,KAAK,EAAEI,GAAG,CAAC;EACrB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMW,aAAa,GAAGnB,cAAc,CAAC,CAACJ,QAAQ,EAAEM,GAAG,KACxDN,QAAQ,CAACwB,SAAS,CAAClB,GAAG,CAAC,CACxB;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAUO,MAAMmB,aAAa,GAAGrB,cAAc,CAAC,CAACJ,QAAQ,EAAEM,GAAG,KACxDN,QAAQ,CAAC0B,SAAS,CAACpB,GAAG,CAAC,CACxB;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAUO,MAAMqB,cAAc,GAAGvB,cAAc,CAAC,CAACJ,QAAQ,EAAEM,GAAG,KACzDN,QAAQ,CAAC4B,UAAU,CAACtB,GAAG,CAAC,CACzB;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAUO,MAAMuB,aAAa,GAAGzB,cAAc,CAAC,CAACJ,QAAQ,EAAEM,GAAG,KACxDN,QAAQ,CAAC8B,SAAS,CAACxB,GAAG,CAAC,CACxB;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAYO,SAASyB,aAAa,CAC3BzB,GAAW,EACXN,QAAe,EACmD;EAClE,MAAM,CAACgC,MAAM,EAAEC,SAAS,CAAC,GAAGV,aAAa,CAACjB,GAAG,EAAEN,QAAQ,CAAC;EAExD,MAAMQ,KAAK,GAAG,IAAA0B,cAAO,EAAC,MAAM;IAC1B,IAAIF,MAAM,IAAI,IAAI,EAAE,OAAOG,SAAS;IACpC,OAAOC,IAAI,CAACC,KAAK,CAACL,MAAM,CAAC;EAC3B,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EACZ,MAAMvB,QAAQ,GAAG,IAAAI,kBAAW,EACzBC,CAAgB,IAAK;IACpB,IAAIA,CAAC,IAAI,IAAI,EAAE;MACb;MACAmB,SAAS,CAACE,SAAS,CAAC;IACtB,CAAC,MAAM;MACL;MACAF,SAAS,CAACG,IAAI,CAACE,SAAS,CAACxB,CAAC,CAAC,CAAC;IAC9B;EACF,CAAC,EACD,CAACmB,SAAS,CAAC,CACZ;EAED,OAAO,CAACzB,KAAK,EAAEC,QAAQ,CAAC;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS8B,eAAe,CAC7BC,oBAA2C,EAC3CxC,QAAe,EACT;EACN,MAAMyC,GAAG,GAAG,IAAAxC,aAAM,EAACuC,oBAAoB,CAAC;EACxCC,GAAG,CAACtC,OAAO,GAAGqC,oBAAoB;EAElC,MAAMjC,IAAI,GAAGP,QAAQ,IAAIJ,kBAAkB,EAAE;EAE7C,IAAAsB,gBAAS,EAAC,MAAM;IACd,MAAMC,QAAQ,GAAGZ,IAAI,CAACa,yBAAyB,CAAEC,UAAU,IAAK;MAC9DoB,GAAG,CAACtC,OAAO,CAACkB,UAAU,CAAC;IACzB,CAAC,CAAC;IACF,OAAO,MAAMF,QAAQ,CAACG,MAAM,EAAE;EAChC,CAAC,EAAE,CAACf,IAAI,CAAC,CAAC;AACZ"}
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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"}
@@ -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
  }
@@ -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":"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"}
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;AAuEhE;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QAzDjB,MAAM,aACA,IAAI,kIAC8B,IAAI,CAyDpD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QAvEjB,MAAM,aACA,IAAI,kIAC8B,IAAI,CAuEpD,CAAC;AACF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QApFlB,MAAM,aACA,IAAI,sIAC8B,IAAI,CAoFpD,CAAC;AACF;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,QAjGjB,MAAM,aACA,IAAI,kJAC8B,IAAI,CAiGpD,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"}
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.1",
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
  }