react-native-mmkv 3.0.0-beta.1 → 3.0.0-beta.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 +12 -4
- package/MMKV/Core/Core.xcodeproj/project.pbxproj +13 -4
- package/MMKV/Core/Core.xcodeproj/xcshareddata/xcschemes/Core.xcscheme +1 -1
- package/MMKV/Core/Core.xcodeproj/xcshareddata/xcschemes/MMKVWatchCore.xcscheme +1 -1
- package/MMKV/Core/MMKV.cpp +3 -4
- package/MMKV/Core/MMKVLog_Android.cpp +56 -1
- package/MMKV/Core/MMKVPredef.h +8 -1
- package/MMKV/Core/MMKV_Android.cpp +3 -3
- package/MMKV/Core/MMKV_IO.cpp +1 -1
- package/MMKV/Core/MemoryFile.cpp +33 -2
- package/MMKV/Core/MemoryFile.h +1 -0
- package/MMKV/Core/MemoryFile_Android.cpp +13 -3
- package/MMKV/Core/MemoryFile_Linux.cpp +8 -3
- package/MMKV/Core/MemoryFile_Win32.cpp +3 -3
- package/MMKV/Core/ThreadLock.cpp +9 -5
- package/MMKV/Core/ThreadLock.h +2 -3
- package/MMKV/Core/aes/AESCrypt.h +1 -0
- package/MMKV/Core/aes/openssl/openssl_aes.h +12 -0
- package/MMKV/Core/aes/openssl/openssl_aes_core.cpp +4 -4
- package/MMKV/Core/core.vcxproj +102 -0
- package/MMKV/Core/crc32/Checksum.h +5 -0
- package/MMKV/Core/crc32/crc32_armv8.cpp +3 -1
- package/MMKV/Core/crc32/zlib/CMakeLists.txt +60 -0
- package/MMKV/LICENSE.TXT +193 -0
- package/MMKV/README.md +74 -10
- package/README.md +40 -8
- package/cpp/MMKVManagedBuffer.h +1 -6
- package/cpp/MmkvHostObject.cpp +1 -0
- package/cpp/MmkvHostObject.h +1 -6
- package/cpp/NativeMmkvModule.cpp +9 -6
- package/lib/commonjs/LazyTurboModule.js +66 -0
- package/lib/commonjs/LazyTurboModule.js.map +1 -0
- package/lib/commonjs/MMKV.js +5 -11
- package/lib/commonjs/MMKV.js.map +1 -1
- package/lib/commonjs/NativeMmkv.js +13 -44
- package/lib/commonjs/NativeMmkv.js.map +1 -1
- package/lib/commonjs/NativeMmkvPlatformContext.js +5 -1
- package/lib/commonjs/NativeMmkvPlatformContext.js.map +1 -1
- package/lib/commonjs/PlatformChecker.js +3 -3
- package/lib/commonjs/PlatformChecker.js.map +1 -1
- package/lib/commonjs/Types.js +2 -0
- package/lib/commonjs/Types.js.map +1 -0
- package/lib/commonjs/createMMKV.js +1 -2
- package/lib/commonjs/createMMKV.js.map +1 -1
- package/lib/commonjs/createMMKV.web.js.map +1 -1
- package/lib/commonjs/index.js +19 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/LazyTurboModule.js +60 -0
- package/lib/module/LazyTurboModule.js.map +1 -0
- package/lib/module/MMKV.js +6 -13
- package/lib/module/MMKV.js.map +1 -1
- package/lib/module/NativeMmkv.js +10 -41
- package/lib/module/NativeMmkv.js.map +1 -1
- package/lib/module/NativeMmkvPlatformContext.js +5 -1
- package/lib/module/NativeMmkvPlatformContext.js.map +1 -1
- package/lib/module/PlatformChecker.js +2 -2
- package/lib/module/PlatformChecker.js.map +1 -1
- package/lib/module/Types.js +2 -0
- package/lib/module/Types.js.map +1 -0
- package/lib/module/createMMKV.js +2 -3
- package/lib/module/createMMKV.js.map +1 -1
- package/lib/module/createMMKV.web.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/LazyTurboModule.d.ts +9 -0
- package/lib/typescript/src/LazyTurboModule.d.ts.map +1 -0
- package/lib/typescript/src/MMKV.d.ts +1 -85
- package/lib/typescript/src/MMKV.d.ts.map +1 -1
- package/lib/typescript/src/NativeMmkv.d.ts +9 -5
- package/lib/typescript/src/NativeMmkv.d.ts.map +1 -1
- package/lib/typescript/src/NativeMmkvPlatformContext.d.ts.map +1 -1
- package/lib/typescript/src/PlatformChecker.d.ts +1 -1
- package/lib/typescript/src/PlatformChecker.d.ts.map +1 -1
- package/lib/typescript/src/Types.d.ts +86 -0
- package/lib/typescript/src/Types.d.ts.map +1 -0
- package/lib/typescript/src/createMMKV.d.ts +2 -1
- package/lib/typescript/src/createMMKV.d.ts.map +1 -1
- package/lib/typescript/src/createMMKV.mock.d.ts +1 -1
- package/lib/typescript/src/createMMKV.mock.d.ts.map +1 -1
- package/lib/typescript/src/createMMKV.web.d.ts +2 -1
- package/lib/typescript/src/createMMKV.web.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +17 -14
- package/react-native.config.js +20 -0
- package/src/LazyTurboModule.ts +98 -0
- package/src/MMKV.ts +7 -98
- package/src/NativeMmkv.ts +19 -46
- package/src/NativeMmkvPlatformContext.ts +5 -3
- package/src/PlatformChecker.ts +4 -2
- package/src/Types.ts +89 -0
- package/src/__tests__/hooks.test.tsx +1 -0
- package/src/createMMKV.mock.ts +1 -1
- package/src/createMMKV.ts +4 -5
- package/src/createMMKV.web.ts +2 -1
- package/src/index.ts +4 -0
- package/src/index.tsx +0 -2
package/README.md
CHANGED
|
@@ -32,17 +32,24 @@
|
|
|
32
32
|
|
|
33
33
|
## Features
|
|
34
34
|
|
|
35
|
-
* **Get** and **set** strings, booleans and
|
|
35
|
+
* **Get** and **set** strings, booleans, numbers and ArrayBuffers
|
|
36
36
|
* **Fully synchronous** calls, no async/await, no Promises, no Bridge.
|
|
37
37
|
* **Encryption** support (secure storage)
|
|
38
38
|
* **Multiple instances** support (separate user-data with global data)
|
|
39
39
|
* **Customize storage location**
|
|
40
40
|
* **High performance** because everything is **written in C++**
|
|
41
41
|
* **~30x faster than AsyncStorage**
|
|
42
|
-
* Uses [**JSI**](https://github.com/react-native-
|
|
42
|
+
* Uses [**JSI**](https://reactnative.dev/docs/the-new-architecture/landing-page#fast-javascriptnative-interfacing) and [**C++ TurboModules**](https://github.com/reactwg/react-native-new-architecture/blob/main/docs/turbo-modules-xplat.md) instead of the "old" Bridge
|
|
43
43
|
* **iOS**, **Android** and **Web** support
|
|
44
44
|
* Easy to use **React Hooks** API
|
|
45
45
|
|
|
46
|
+
## react-native-mmkv V3
|
|
47
|
+
|
|
48
|
+
> [!IMPORTANT]
|
|
49
|
+
> react-native-mmkv V3 is now a pure C++ TurboModule, and **requires the new architecture to be enabled**.
|
|
50
|
+
> - If you want to use react-native-mmkv 3.x.x, you need to enable the new architecture in your app (see ["Enable the New Architecture for Apps"](https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md))
|
|
51
|
+
> - If you cannot use the new architecture yet, downgrade to react-native-mmkv 2.x.x for now.
|
|
52
|
+
|
|
46
53
|
## Sponsors
|
|
47
54
|
|
|
48
55
|
<div align="right">
|
|
@@ -100,7 +107,7 @@ export const storage = new MMKV()
|
|
|
100
107
|
|
|
101
108
|
This creates a new storage instance using the default MMKV storage ID (`mmkv.default`).
|
|
102
109
|
|
|
103
|
-
#### App Groups
|
|
110
|
+
#### App Groups or Extensions
|
|
104
111
|
|
|
105
112
|
If you want to share MMKV data between your app and other apps or app extensions in the same group, open `Info.plist` and create an `AppGroup` key with your app group's value. MMKV will then automatically store data inside the app group which can be read and written to from other apps or app extensions in the same group by making use of MMKV's multi processing mode.
|
|
106
113
|
See [Configuring App Groups](https://developer.apple.com/documentation/xcode/configuring-app-groups).
|
|
@@ -108,12 +115,13 @@ See [Configuring App Groups](https://developer.apple.com/documentation/xcode/con
|
|
|
108
115
|
#### Customize
|
|
109
116
|
|
|
110
117
|
```js
|
|
111
|
-
import { MMKV } from 'react-native-mmkv'
|
|
118
|
+
import { MMKV, Mode } from 'react-native-mmkv'
|
|
112
119
|
|
|
113
120
|
export const storage = new MMKV({
|
|
114
121
|
id: `user-${userId}-storage`,
|
|
115
122
|
path: `${USER_DIRECTORY}/storage`,
|
|
116
|
-
encryptionKey: 'hunter2'
|
|
123
|
+
encryptionKey: 'hunter2',
|
|
124
|
+
mode: Mode.MULTI_PROCESS
|
|
117
125
|
})
|
|
118
126
|
```
|
|
119
127
|
|
|
@@ -124,6 +132,7 @@ The following values can be configured:
|
|
|
124
132
|
* `id`: The MMKV instance's ID. If you want to use multiple instances, use different IDs. For example, you can separate the global app's storage and a logged-in user's storage. (required if `path` or `encryptionKey` fields are specified, otherwise defaults to: `'mmkv.default'`)
|
|
125
133
|
* `path`: The MMKV instance's root path. By default, MMKV stores file inside `$(Documents)/mmkv/`. You can customize MMKV's root directory on MMKV initialization (documentation: [iOS](https://github.com/Tencent/MMKV/wiki/iOS_advance#customize-location) / [Android](https://github.com/Tencent/MMKV/wiki/android_advance#customize-location))
|
|
126
134
|
* `encryptionKey`: The MMKV instance's encryption/decryption key. By default, MMKV stores all key-values in plain text on file, relying on iOS's/Android's sandbox to make sure the file is encrypted. Should you worry about information leaking, you can choose to encrypt MMKV. (documentation: [iOS](https://github.com/Tencent/MMKV/wiki/iOS_advance#encryption) / [Android](https://github.com/Tencent/MMKV/wiki/android_advance#encryption))
|
|
135
|
+
* `mode`: The MMKV's process behaviour - when set to `MULTI_PROCESS`, the MMKV instance will assume data can be changed from the outside (e.g. App Clips, Extensions or App Groups).
|
|
127
136
|
|
|
128
137
|
### Set
|
|
129
138
|
|
|
@@ -141,6 +150,14 @@ const age = storage.getNumber('user.age') // 21
|
|
|
141
150
|
const isMmkvFastAsf = storage.getBoolean('is-mmkv-fast-asf') // true
|
|
142
151
|
```
|
|
143
152
|
|
|
153
|
+
### Hooks
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
const [username, setUsername] = useMMKVString('user.name')
|
|
157
|
+
const [age, setAge] = useMMKVNumber('user.age')
|
|
158
|
+
const [isMmkvFastAsf, setIsMmkvFastAf] = useMMKVBoolean('is-mmkv-fast-asf')
|
|
159
|
+
```
|
|
160
|
+
|
|
144
161
|
### Keys
|
|
145
162
|
|
|
146
163
|
```js
|
|
@@ -197,9 +214,20 @@ const buffer = storage.getBuffer('someToken')
|
|
|
197
214
|
console.log(buffer) // [1, 100, 255]
|
|
198
215
|
```
|
|
199
216
|
|
|
200
|
-
|
|
217
|
+
### Size
|
|
201
218
|
|
|
202
|
-
|
|
219
|
+
```js
|
|
220
|
+
// get size of MMKV storage in bytes
|
|
221
|
+
const size = storage.size
|
|
222
|
+
if (size >= 4096) {
|
|
223
|
+
// clean unused keys and clear memory cache
|
|
224
|
+
storage.trim()
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Testing with Jest or Vitest
|
|
229
|
+
|
|
230
|
+
A mocked MMKV instance is automatically used when testing with Jest or Vitest, so you will be able to use `new MMKV()` as per normal in your tests. Refer to [example/test/MMKV.test.ts](example/test/MMKV.test.ts) for an example using Jest.
|
|
203
231
|
|
|
204
232
|
## Documentation
|
|
205
233
|
|
|
@@ -221,7 +249,11 @@ If a user chooses to disable LocalStorage in their browser, the library will aut
|
|
|
221
249
|
|
|
222
250
|
## Limitations
|
|
223
251
|
|
|
224
|
-
|
|
252
|
+
- react-native-mmkv V3 requires react-native 0.74 or higher.
|
|
253
|
+
- react-native-mmkv V3 requires [the new architecture](https://reactnative.dev/docs/the-new-architecture/landing-page)/TurboModules to be enabled.
|
|
254
|
+
- Since react-native-mmkv uses JSI for synchronous native method invocations, remote debugging (e.g. with Chrome) is no longer possible. Instead, you should use [Flipper](https://fbflipper.com) or [React DevTools](https://react.dev/learn/react-developer-tools).
|
|
255
|
+
|
|
256
|
+
## Integrations
|
|
225
257
|
|
|
226
258
|
### Flipper
|
|
227
259
|
|
package/cpp/MMKVManagedBuffer.h
CHANGED
package/cpp/MmkvHostObject.cpp
CHANGED
|
@@ -52,6 +52,7 @@ MmkvHostObject::~MmkvHostObject() {
|
|
|
52
52
|
if (instance != nullptr) {
|
|
53
53
|
std::string instanceId = instance->mmapID();
|
|
54
54
|
Logger::log("RNMMKV", "Destroying MMKV instance \"%s\"...", instanceId.c_str());
|
|
55
|
+
instance->sync();
|
|
55
56
|
instance->clearMemoryCache();
|
|
56
57
|
}
|
|
57
58
|
instance = nullptr;
|
package/cpp/MmkvHostObject.h
CHANGED
|
@@ -8,15 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
|
+
#include "MMKV.h"
|
|
11
12
|
#include "NativeMmkvModule.h"
|
|
12
13
|
#include <jsi/jsi.h>
|
|
13
14
|
|
|
14
|
-
#if __has_include("MMKV.h")
|
|
15
|
-
#include "MMKV.h"
|
|
16
|
-
#else
|
|
17
|
-
#include <MMKVCore/MMKV.h>
|
|
18
|
-
#endif
|
|
19
|
-
|
|
20
15
|
using namespace facebook;
|
|
21
16
|
using namespace mmkv;
|
|
22
17
|
|
package/cpp/NativeMmkvModule.cpp
CHANGED
|
@@ -16,21 +16,24 @@ NativeMmkvModule::NativeMmkvModule(std::shared_ptr<CallInvoker> jsInvoker)
|
|
|
16
16
|
: NativeMmkvCxxSpec(jsInvoker) {}
|
|
17
17
|
|
|
18
18
|
bool NativeMmkvModule::initialize(jsi::Runtime& runtime, std::string basePath) {
|
|
19
|
-
if (basePath.
|
|
19
|
+
if (basePath.empty()) {
|
|
20
20
|
throw jsi::JSError(runtime, "Path cannot be empty!");
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
Logger::log("RNMMKV", "Initializing MMKV at %s...", basePath.c_str());
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
#ifdef DEBUG
|
|
26
|
+
MMKVLogLevel logLevel = MMKVLogDebug;
|
|
27
|
+
#else
|
|
28
|
+
MMKVLogLevel logLevel = MMKVLogWarning;
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
MMKV::initializeMMKV(basePath, logLevel);
|
|
26
32
|
|
|
27
33
|
return true;
|
|
28
34
|
}
|
|
29
35
|
|
|
30
|
-
NativeMmkvModule::~NativeMmkvModule() {
|
|
31
|
-
Logger::log("RNMMKV", "Closing all MMKV instances...");
|
|
32
|
-
MMKV::onExit();
|
|
33
|
-
}
|
|
36
|
+
NativeMmkvModule::~NativeMmkvModule() {}
|
|
34
37
|
|
|
35
38
|
jsi::Object NativeMmkvModule::createMMKV(jsi::Runtime& runtime, MMKVConfig config) {
|
|
36
39
|
auto instance = std::make_shared<MmkvHostObject>(config);
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getLazyTurboModule = getLazyTurboModule;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
const BULLET_POINT = '\n* ';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Lazily get a TurboModule by wrapping it in a Proxy.
|
|
12
|
+
*/
|
|
13
|
+
function getLazyTurboModule(initializeTurboModule) {
|
|
14
|
+
const proxy = new Proxy({
|
|
15
|
+
module: null
|
|
16
|
+
}, {
|
|
17
|
+
get: (target, property) => {
|
|
18
|
+
if (target.module == null) {
|
|
19
|
+
// Target is null, let's initialize it!
|
|
20
|
+
target.module = initializeTurboModule();
|
|
21
|
+
if (target.module == null) {
|
|
22
|
+
// TurboModule not found, something went wrong!
|
|
23
|
+
if (global.__turboModuleProxy == null) {
|
|
24
|
+
// TurboModules are not available/new arch is not enabled.
|
|
25
|
+
// react-native-mmkv 3.x.x requires new arch (react-native >0.74)
|
|
26
|
+
// react-native-mmkv 2.x.x works on old arch (react-native <0.74)
|
|
27
|
+
throw new Error('Failed to create a new MMKV instance: react-native-mmkv 3.x.x requires TurboModules, but the new architecture is not enabled!' + BULLET_POINT + 'Downgrade to react-native-mmkv 2.x.x if you want to stay on the old architecture.' + BULLET_POINT + 'Enable the new architecture in your app to use react-native-mmkv 3.x.x. (See https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md)');
|
|
28
|
+
}
|
|
29
|
+
const message = 'Failed to create a new MMKV instance: The native MMKV Module could not be found.';
|
|
30
|
+
const suggestions = [];
|
|
31
|
+
suggestions.push('Make sure react-native-mmkv is correctly autolinked (run `npx react-native config` to verify)');
|
|
32
|
+
suggestions.push('Make sure you enabled the new architecture (TurboModules) and CodeGen properly generated the react-native-mmkv specs. See https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md');
|
|
33
|
+
suggestions.push('Make sure you are using react-native 0.74.0 or higher, because react-native-mmkv is a C++ TurboModule.');
|
|
34
|
+
suggestions.push('Make sure you rebuilt the app.');
|
|
35
|
+
switch (_reactNative.Platform.OS) {
|
|
36
|
+
case 'ios':
|
|
37
|
+
case 'macos':
|
|
38
|
+
suggestions.push('Make sure you ran `pod install` in the ios/ directory.');
|
|
39
|
+
break;
|
|
40
|
+
case 'android':
|
|
41
|
+
suggestions.push('Make sure gradle is synced.');
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
throw new Error(`MMKV is not supported on ${_reactNative.Platform.OS}!`);
|
|
45
|
+
}
|
|
46
|
+
// check if Expo
|
|
47
|
+
const ExpoConstants = _reactNative.NativeModules.NativeUnimoduleProxy?.modulesConstants?.ExponentConstants;
|
|
48
|
+
if (ExpoConstants != null) {
|
|
49
|
+
if (ExpoConstants.appOwnership === 'expo') {
|
|
50
|
+
// We're running Expo Go
|
|
51
|
+
throw new Error('react-native-mmkv is not supported in Expo Go! Use EAS (`expo prebuild`) or eject to a bare workflow instead.');
|
|
52
|
+
} else {
|
|
53
|
+
// We're running Expo bare / standalone
|
|
54
|
+
suggestions.push('Make sure you ran `expo prebuild`.');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const error = message + BULLET_POINT + suggestions.join(BULLET_POINT);
|
|
58
|
+
throw new Error(error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return target.module[property];
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return proxy;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=LazyTurboModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","BULLET_POINT","getLazyTurboModule","initializeTurboModule","proxy","Proxy","module","get","target","property","global","__turboModuleProxy","Error","message","suggestions","push","Platform","OS","ExpoConstants","NativeModules","NativeUnimoduleProxy","modulesConstants","ExponentConstants","appOwnership","error","join"],"sourceRoot":"../../src","sources":["LazyTurboModule.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAWA,MAAMC,YAAY,GAAG,MAAM;;AAE3B;AACA;AACA;AACO,SAASC,kBAAkBA,CAChCC,qBAAqC,EAClC;EACH,MAAMC,KAAK,GAAG,IAAIC,KAAK,CACrB;IACEC,MAAM,EAAE;EACV,CAAC,EACD;IACEC,GAAG,EAAEA,CAACC,MAAM,EAAEC,QAAQ,KAAK;MACzB,IAAID,MAAM,CAACF,MAAM,IAAI,IAAI,EAAE;QACzB;QACAE,MAAM,CAACF,MAAM,GAAGH,qBAAqB,CAAC,CAAC;QAEvC,IAAIK,MAAM,CAACF,MAAM,IAAI,IAAI,EAAE;UACzB;UACA,IAAII,MAAM,CAACC,kBAAkB,IAAI,IAAI,EAAE;YACrC;YACA;YACA;YACA,MAAM,IAAIC,KAAK,CACb,+HAA+H,GAC7HX,YAAY,GACZ,mFAAmF,GACnFA,YAAY,GACZ,sKACJ,CAAC;UACH;UAEA,MAAMY,OAAO,GACX,kFAAkF;UACpF,MAAMC,WAAqB,GAAG,EAAE;UAChCA,WAAW,CAACC,IAAI,CACd,+FACF,CAAC;UACDD,WAAW,CAACC,IAAI,CACd,kNACF,CAAC;UACDD,WAAW,CAACC,IAAI,CACd,wGACF,CAAC;UACDD,WAAW,CAACC,IAAI,CAAC,gCAAgC,CAAC;UAClD,QAAQC,qBAAQ,CAACC,EAAE;YACjB,KAAK,KAAK;YACV,KAAK,OAAO;cACVH,WAAW,CAACC,IAAI,CACd,wDACF,CAAC;cACD;YACF,KAAK,SAAS;cACZD,WAAW,CAACC,IAAI,CAAC,6BAA6B,CAAC;cAC/C;YACF;cACE,MAAM,IAAIH,KAAK,CAAE,4BAA2BI,qBAAQ,CAACC,EAAG,GAAE,CAAC;UAC/D;UACA;UACA,MAAMC,aAAa,GACjBC,0BAAa,CAACC,oBAAoB,EAAEC,gBAAgB,EAChDC,iBAAiB;UACvB,IAAIJ,aAAa,IAAI,IAAI,EAAE;YACzB,IAAIA,aAAa,CAACK,YAAY,KAAK,MAAM,EAAE;cACzC;cACA,MAAM,IAAIX,KAAK,CACb,+GACF,CAAC;YACH,CAAC,MAAM;cACL;cACAE,WAAW,CAACC,IAAI,CAAC,oCAAoC,CAAC;YACxD;UACF;UAEA,MAAMS,KAAK,GACTX,OAAO,GAAGZ,YAAY,GAAGa,WAAW,CAACW,IAAI,CAACxB,YAAY,CAAC;UACzD,MAAM,IAAIW,KAAK,CAACY,KAAK,CAAC;QACxB;MACF;MAEA,OAAOhB,MAAM,CAACF,MAAM,CAACG,QAAQ,CAAY;IAC3C;EACF,CACF,CAAC;EACD,OAAOL,KAAK;AACd","ignoreList":[]}
|
package/lib/commonjs/MMKV.js
CHANGED
|
@@ -21,10 +21,6 @@ var _createMMKV = require("./createMMKV");
|
|
|
21
21
|
var _createMMKV2 = require("./createMMKV.mock");
|
|
22
22
|
var _PlatformChecker = require("./PlatformChecker");
|
|
23
23
|
var _NativeMmkv = require("./NativeMmkv");
|
|
24
|
-
/**
|
|
25
|
-
* Represents a single MMKV instance.
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
24
|
const onValueChangedListeners = new Map();
|
|
29
25
|
|
|
30
26
|
/**
|
|
@@ -39,14 +35,12 @@ class MMKV {
|
|
|
39
35
|
id: 'mmkv.default'
|
|
40
36
|
}) {
|
|
41
37
|
this.id = configuration.id;
|
|
42
|
-
this.nativeInstance = (0, _PlatformChecker.
|
|
38
|
+
this.nativeInstance = (0, _PlatformChecker.isTest)() ? (0, _createMMKV2.createMockMMKV)() : (0, _createMMKV.createMMKV)(configuration);
|
|
43
39
|
this.functionCache = {};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
});
|
|
49
|
-
}
|
|
40
|
+
_reactNative.AppState.addEventListener('memoryWarning', () => {
|
|
41
|
+
// when we have a memory warning, delete unused keys by trimming MMKV
|
|
42
|
+
this.trim();
|
|
43
|
+
});
|
|
50
44
|
}
|
|
51
45
|
get onValueChangedListeners() {
|
|
52
46
|
if (!onValueChangedListeners.has(this.id)) {
|
package/lib/commonjs/MMKV.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_createMMKV","_createMMKV2","_PlatformChecker","_NativeMmkv","onValueChangedListeners","Map","MMKV","constructor","configuration","id","nativeInstance","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_createMMKV","_createMMKV2","_PlatformChecker","_NativeMmkv","onValueChangedListeners","Map","MMKV","constructor","configuration","id","nativeInstance","isTest","createMockMMKV","createMMKV","functionCache","AppState","addEventListener","trim","has","set","get","getFunctionFromCache","functionName","onValuesChanged","keys","length","key","listener","size","value","func","getBoolean","getString","getNumber","getBuffer","contains","delete","getAllKeys","clearAll","recrypt","toString","join","toJSON","addOnValueChangedListener","onValueChanged","push","remove","index","indexOf","splice","exports"],"sourceRoot":"../../src","sources":["MMKV.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Mode = void 0;
|
|
7
|
-
exports.getMMKVTurboModule = getMMKVTurboModule;
|
|
6
|
+
exports.Mode = exports.MMKVTurboModule = void 0;
|
|
8
7
|
var _reactNative = require("react-native");
|
|
8
|
+
var _LazyTurboModule = require("./LazyTurboModule");
|
|
9
9
|
var _NativeMmkvPlatformContext = require("./NativeMmkvPlatformContext");
|
|
10
10
|
/**
|
|
11
11
|
* Configures the mode of the MMKV instance.
|
|
@@ -18,49 +18,18 @@ let Mode = exports.Mode = /*#__PURE__*/function (Mode) {
|
|
|
18
18
|
/**
|
|
19
19
|
* Used for configuration of a single MMKV instance.
|
|
20
20
|
*/
|
|
21
|
-
let _module = null;
|
|
22
21
|
let basePath = null;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
if (_module == null) {
|
|
33
|
-
// if it still is null, something went wrong!
|
|
34
|
-
let message = 'Failed to create a new MMKV instance: The native MMKV Module could not be found.';
|
|
35
|
-
message += '\n* Make sure react-native-mmkv is correctly autolinked (run `npx react-native config` to verify)';
|
|
36
|
-
if (_reactNative.Platform.OS === 'ios' || _reactNative.Platform.OS === 'macos') {
|
|
37
|
-
message += '\n* Make sure you ran `pod install` in the ios/ directory.';
|
|
38
|
-
}
|
|
39
|
-
if (_reactNative.Platform.OS === 'android') {
|
|
40
|
-
message += '\n* Make sure gradle is synced.';
|
|
41
|
-
}
|
|
42
|
-
// check if Expo
|
|
43
|
-
const ExpoConstants = _reactNative.NativeModules.NativeUnimoduleProxy?.modulesConstants?.ExponentConstants;
|
|
44
|
-
if (ExpoConstants != null) {
|
|
45
|
-
if (ExpoConstants.appOwnership === 'expo') {
|
|
46
|
-
// We're running Expo Go
|
|
47
|
-
throw new Error('react-native-mmkv is not supported in Expo Go! Use EAS (`expo prebuild`) or eject to a bare workflow instead.');
|
|
48
|
-
} else {
|
|
49
|
-
// We're running Expo bare / standalone
|
|
50
|
-
message += '\n* Make sure you ran `expo prebuild`.';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
message += '\n* Make sure you rebuilt the app.';
|
|
54
|
-
throw new Error(message);
|
|
55
|
-
}
|
|
56
|
-
if (basePath == null) {
|
|
57
|
-
// Get base path from platform specific context
|
|
58
|
-
basePath = _NativeMmkvPlatformContext.PlatformContext.getBaseDirectory();
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Initialize MMKV
|
|
62
|
-
_module.initialize(basePath);
|
|
22
|
+
function getNativeModule() {
|
|
23
|
+
if (basePath == null) {
|
|
24
|
+
// use default base path from the Platform (iOS/Android)
|
|
25
|
+
basePath = _NativeMmkvPlatformContext.PlatformContext.getBaseDirectory();
|
|
26
|
+
}
|
|
27
|
+
const module = _reactNative.TurboModuleRegistry.get('MmkvCxx');
|
|
28
|
+
if (module != null) {
|
|
29
|
+
// initialize MMKV
|
|
30
|
+
module.initialize(basePath);
|
|
63
31
|
}
|
|
64
|
-
return
|
|
32
|
+
return module;
|
|
65
33
|
}
|
|
34
|
+
const MMKVTurboModule = exports.MMKVTurboModule = (0, _LazyTurboModule.getLazyTurboModule)(getNativeModule);
|
|
66
35
|
//# sourceMappingURL=NativeMmkv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_NativeMmkvPlatformContext","Mode","exports","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_LazyTurboModule","_NativeMmkvPlatformContext","Mode","exports","basePath","getNativeModule","PlatformContext","getBaseDirectory","module","TurboModuleRegistry","get","initialize","MMKVTurboModule","getLazyTurboModule"],"sourceRoot":"../../src","sources":["NativeMmkv.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,0BAAA,GAAAF,OAAA;AAEA;AACA;AACA;AAFA,IAGYG,IAAI,GAAAC,OAAA,CAAAD,IAAA,0BAAJA,IAAI;EAAJA,IAAI,CAAJA,IAAI;EAAJA,IAAI,CAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA;AAWhB;AACA;AACA;AAiEA,IAAIE,QAAuB,GAAG,IAAI;AAElC,SAASC,eAAeA,CAAA,EAAgB;EACtC,IAAID,QAAQ,IAAI,IAAI,EAAE;IACpB;IACAA,QAAQ,GAAGE,0CAAe,CAACC,gBAAgB,CAAC,CAAC;EAC/C;EAEA,MAAMC,MAAM,GAAGC,gCAAmB,CAACC,GAAG,CAAO,SAAS,CAAC;EAEvD,IAAIF,MAAM,IAAI,IAAI,EAAE;IAClB;IACAA,MAAM,CAACG,UAAU,CAACP,QAAQ,CAAC;EAC7B;EAEA,OAAOI,MAAM;AACf;AACO,MAAMI,eAAe,GAAAT,OAAA,CAAAS,eAAA,GAAG,IAAAC,mCAAkB,EAACR,eAAe,CAAC","ignoreList":[]}
|
|
@@ -5,5 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.PlatformContext = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
|
-
|
|
8
|
+
var _LazyTurboModule = require("./LazyTurboModule");
|
|
9
|
+
function getModule() {
|
|
10
|
+
return _reactNative.TurboModuleRegistry.get('MmkvPlatformContext');
|
|
11
|
+
}
|
|
12
|
+
const PlatformContext = exports.PlatformContext = (0, _LazyTurboModule.getLazyTurboModule)(getModule);
|
|
9
13
|
//# sourceMappingURL=NativeMmkvPlatformContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_LazyTurboModule","getModule","TurboModuleRegistry","get","PlatformContext","exports","getLazyTurboModule"],"sourceRoot":"../../src","sources":["NativeMmkvPlatformContext.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AASA,SAASE,SAASA,CAAA,EAAgB;EAChC,OAAOC,gCAAmB,CAACC,GAAG,CAAO,qBAAqB,CAAC;AAC7D;AACO,MAAMC,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,IAAAE,mCAAkB,EAACL,SAAS,CAAC","ignoreList":[]}
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
function
|
|
6
|
+
exports.isTest = isTest;
|
|
7
|
+
function isTest() {
|
|
8
8
|
if (global.process == null) {
|
|
9
9
|
// In a WebBrowser/Electron the `process` variable does not exist
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
|
-
return process.env.JEST_WORKER_ID != null;
|
|
12
|
+
return process.env.JEST_WORKER_ID != null || process.env.VITEST_WORKER_ID != null;
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=PlatformChecker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["isTest","global","process","env","JEST_WORKER_ID","VITEST_WORKER_ID"],"sourceRoot":"../../src","sources":["PlatformChecker.ts"],"mappings":";;;;;;AAAO,SAASA,MAAMA,CAAA,EAAY;EAChC,IAAIC,MAAM,CAACC,OAAO,IAAI,IAAI,EAAE;IAC1B;IACA,OAAO,KAAK;EACd;EACA,OACEA,OAAO,CAACC,GAAG,CAACC,cAAc,IAAI,IAAI,IAAIF,OAAO,CAACC,GAAG,CAACE,gBAAgB,IAAI,IAAI;AAE9E","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["Types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -5,9 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createMMKV = void 0;
|
|
7
7
|
var _NativeMmkv = require("./NativeMmkv");
|
|
8
|
-
const _module = (0, _NativeMmkv.getMMKVTurboModule)();
|
|
9
8
|
const createMMKV = config => {
|
|
10
|
-
const instance =
|
|
9
|
+
const instance = _NativeMmkv.MMKVTurboModule.createMMKV(config);
|
|
11
10
|
if (__DEV__) {
|
|
12
11
|
if (typeof instance !== 'object' || instance == null) {
|
|
13
12
|
throw new Error('Failed to create MMKV instance - an unknown object was returned by createMMKV(..)!');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_NativeMmkv","require","
|
|
1
|
+
{"version":3,"names":["_NativeMmkv","require","createMMKV","config","instance","MMKVTurboModule","__DEV__","Error","exports"],"sourceRoot":"../../src","sources":["createMMKV.ts"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AAGO,MAAMC,UAAU,GAAIC,MAAqB,IAAiB;EAC/D,MAAMC,QAAQ,GAAGC,2BAAe,CAACH,UAAU,CAACC,MAAM,CAAC;EACnD,IAAIG,OAAO,EAAE;IACX,IAAI,OAAOF,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,IAAI,IAAI,EAAE;MACpD,MAAM,IAAIG,KAAK,CACb,oFACF,CAAC;IACH;EACF;EACA,OAAOH,QAAQ;AACjB,CAAC;AAACI,OAAA,CAAAN,UAAA,GAAAA,UAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_createTextEncoder","require","canUseDOM","window","document","createElement","hasAccessToLocalStorage","localStorage","KEY_WILDCARD","inMemoryStorage","Map","createMMKV","config","encryptionKey","Error","path","console","warn","storage","getItem","key","get","setItem","value","set","removeItem","delete","clear","length","size","index","Object","keys","at","domStorage","global","textEncoder","createTextEncoder","id","includes","keyPrefix","prefixedKey","clearAll","startsWith","toString","getString","undefined","getNumber","Number","getBoolean","getBuffer","encode","getAllKeys","filter","map","slice","contains","recrypt","trim","exports"],"sourceRoot":"../../src","sources":["createMMKV.web.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["_createTextEncoder","require","canUseDOM","window","document","createElement","hasAccessToLocalStorage","localStorage","KEY_WILDCARD","inMemoryStorage","Map","createMMKV","config","encryptionKey","Error","path","console","warn","storage","getItem","key","get","setItem","value","set","removeItem","delete","clear","length","size","index","Object","keys","at","domStorage","global","textEncoder","createTextEncoder","id","includes","keyPrefix","prefixedKey","clearAll","startsWith","toString","getString","undefined","getNumber","Number","getBoolean","getBuffer","encode","getAllKeys","filter","map","slice","contains","recrypt","trim","exports"],"sourceRoot":"../../src","sources":["createMMKV.web.ts"],"mappings":";;;;;;AAGA,IAAAA,kBAAA,GAAAC,OAAA;AAHA;;AAKA,MAAMC,SAAS,GACb,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,QAAQ,EAAEC,aAAa,IAAI,IAAI;AAEzE,MAAMC,uBAAuB,GAAGA,CAAA,KAAM;EACpC,IAAI;IACF;IACAH,MAAM,CAACI,YAAY;IAEnB,OAAO,IAAI;EACb,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF,CAAC;AAED,MAAMC,YAAY,GAAG,IAAI;AACzB,MAAMC,eAAe,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAE1C,MAAMC,UAAU,GAAIC,MAAqB,IAAiB;EAC/D,IAAIA,MAAM,CAACC,aAAa,IAAI,IAAI,EAAE;IAChC,MAAM,IAAIC,KAAK,CAAC,gDAAgD,CAAC;EACnE;EACA,IAAIF,MAAM,CAACG,IAAI,IAAI,IAAI,EAAE;IACvB,MAAM,IAAID,KAAK,CAAC,uCAAuC,CAAC;EAC1D;;EAEA;EACA,IAAI,CAACR,uBAAuB,CAAC,CAAC,IAAIJ,SAAS,EAAE;IAC3Cc,OAAO,CAACC,IAAI,CACV,6FACF,CAAC;EACH;EAEA,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpB,IAAI,CAAChB,SAAS,EAAE;MACd,MAAM,IAAIY,KAAK,CACb,kFACF,CAAC;IACH;IAEA,IAAI,CAACR,uBAAuB,CAAC,CAAC,EAAE;MAC9B,OAAO;QACLa,OAAO,EAAGC,GAAW,IAAKX,eAAe,CAACY,GAAG,CAACD,GAAG,CAAC,IAAI,IAAI;QAC1DE,OAAO,EAAEA,CAACF,GAAW,EAAEG,KAAa,KAClCd,eAAe,CAACe,GAAG,CAACJ,GAAG,EAAEG,KAAK,CAAC;QACjCE,UAAU,EAAGL,GAAW,IAAKX,eAAe,CAACiB,MAAM,CAACN,GAAG,CAAC;QACxDO,KAAK,EAAEA,CAAA,KAAMlB,eAAe,CAACkB,KAAK,CAAC,CAAC;QACpCC,MAAM,EAAEnB,eAAe,CAACoB,IAAI;QAC5BT,GAAG,EAAGU,KAAa,IAAKC,MAAM,CAACC,IAAI,CAACvB,eAAe,CAAC,CAACwB,EAAE,CAACH,KAAK,CAAC,IAAI;MACpE,CAAC;IACH;IAEA,MAAMI,UAAU,GACdC,MAAM,EAAE5B,YAAY,IAAIJ,MAAM,EAAEI,YAAY,IAAIA,YAAY;IAC9D,IAAI2B,UAAU,IAAI,IAAI,EAAE;MACtB,MAAM,IAAIpB,KAAK,CAAE,yCAAwC,CAAC;IAC5D;IACA,OAAOoB,UAAU;EACnB,CAAC;EAED,MAAME,WAAW,GAAG,IAAAC,oCAAiB,EAAC,CAAC;EAEvC,IAAIzB,MAAM,CAAC0B,EAAE,CAACC,QAAQ,CAAC/B,YAAY,CAAC,EAAE;IACpC,MAAM,IAAIM,KAAK,CACb,2DACF,CAAC;EACH;EAEA,MAAM0B,SAAS,GAAI,GAAE5B,MAAM,CAAC0B,EAAG,GAAE9B,YAAa,EAAC,CAAC,CAAC;EACjD,MAAMiC,WAAW,GAAIrB,GAAW,IAAK;IACnC,IAAIA,GAAG,CAACmB,QAAQ,CAAC,IAAI,CAAC,EAAE;MACtB,MAAM,IAAIzB,KAAK,CACb,4DACF,CAAC;IACH;IACA,OAAQ,GAAE0B,SAAU,GAAEpB,GAAI,EAAC;EAC7B,CAAC;EAED,OAAO;IACLsB,QAAQ,EAAEA,CAAA,KAAM;MACd,MAAMV,IAAI,GAAGD,MAAM,CAACC,IAAI,CAACd,OAAO,CAAC,CAAC,CAAC;MACnC,KAAK,MAAME,GAAG,IAAIY,IAAI,EAAE;QACtB,IAAIZ,GAAG,CAACuB,UAAU,CAACH,SAAS,CAAC,EAAE;UAC7BtB,OAAO,CAAC,CAAC,CAACO,UAAU,CAACL,GAAG,CAAC;QAC3B;MACF;IACF,CAAC;IACDM,MAAM,EAAGN,GAAG,IAAKF,OAAO,CAAC,CAAC,CAACO,UAAU,CAACgB,WAAW,CAACrB,GAAG,CAAC,CAAC;IACvDI,GAAG,EAAEA,CAACJ,GAAG,EAAEG,KAAK,KAAK;MACnBL,OAAO,CAAC,CAAC,CAACI,OAAO,CAACmB,WAAW,CAACrB,GAAG,CAAC,EAAEG,KAAK,CAACqB,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IACDC,SAAS,EAAGzB,GAAG,IAAKF,OAAO,CAAC,CAAC,CAACC,OAAO,CAACsB,WAAW,CAACrB,GAAG,CAAC,CAAC,IAAI0B,SAAS;IACpEC,SAAS,EAAG3B,GAAG,IAAK;MAClB,MAAMG,KAAK,GAAGL,OAAO,CAAC,CAAC,CAACC,OAAO,CAACsB,WAAW,CAACrB,GAAG,CAAC,CAAC;MACjD,IAAIG,KAAK,IAAI,IAAI,EAAE,OAAOuB,SAAS;MACnC,OAAOE,MAAM,CAACzB,KAAK,CAAC;IACtB,CAAC;IACD0B,UAAU,EAAG7B,GAAG,IAAK;MACnB,MAAMG,KAAK,GAAGL,OAAO,CAAC,CAAC,CAACC,OAAO,CAACsB,WAAW,CAACrB,GAAG,CAAC,CAAC;MACjD,IAAIG,KAAK,IAAI,IAAI,EAAE,OAAOuB,SAAS;MACnC,OAAOvB,KAAK,KAAK,MAAM;IACzB,CAAC;IACD2B,SAAS,EAAG9B,GAAG,IAAK;MAClB,MAAMG,KAAK,GAAGL,OAAO,CAAC,CAAC,CAACC,OAAO,CAACsB,WAAW,CAACrB,GAAG,CAAC,CAAC;MACjD,IAAIG,KAAK,IAAI,IAAI,EAAE,OAAOuB,SAAS;MACnC,OAAOV,WAAW,CAACe,MAAM,CAAC5B,KAAK,CAAC;IAClC,CAAC;IACD6B,UAAU,EAAEA,CAAA,KAAM;MAChB,MAAMpB,IAAI,GAAGD,MAAM,CAACC,IAAI,CAACd,OAAO,CAAC,CAAC,CAAC;MACnC,OAAOc,IAAI,CACRqB,MAAM,CAAEjC,GAAG,IAAKA,GAAG,CAACuB,UAAU,CAACH,SAAS,CAAC,CAAC,CAC1Cc,GAAG,CAAElC,GAAG,IAAKA,GAAG,CAACmC,KAAK,CAACf,SAAS,CAACZ,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD4B,QAAQ,EAAGpC,GAAG,IAAKF,OAAO,CAAC,CAAC,CAACC,OAAO,CAACsB,WAAW,CAACrB,GAAG,CAAC,CAAC,IAAI,IAAI;IAC9DqC,OAAO,EAAEA,CAAA,KAAM;MACb,MAAM,IAAI3C,KAAK,CAAC,wCAAwC,CAAC;IAC3D,CAAC;IACDe,IAAI,EAAE,CAAC;IACP6B,IAAI,EAAEA,CAAA,KAAM;MACV;IAAA;EAEJ,CAAC;AACH,CAAC;AAACC,OAAA,CAAAhD,UAAA,GAAAA,UAAA","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -3,9 +3,26 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
Mode: true,
|
|
8
|
+
Configuration: true
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "Configuration", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _NativeMmkv.Configuration;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(exports, "Mode", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _NativeMmkv.Mode;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
6
22
|
var _MMKV = require("./MMKV");
|
|
7
23
|
Object.keys(_MMKV).forEach(function (key) {
|
|
8
24
|
if (key === "default" || key === "__esModule") return;
|
|
25
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
9
26
|
if (key in exports && exports[key] === _MMKV[key]) return;
|
|
10
27
|
Object.defineProperty(exports, key, {
|
|
11
28
|
enumerable: true,
|
|
@@ -17,6 +34,7 @@ Object.keys(_MMKV).forEach(function (key) {
|
|
|
17
34
|
var _hooks = require("./hooks");
|
|
18
35
|
Object.keys(_hooks).forEach(function (key) {
|
|
19
36
|
if (key === "default" || key === "__esModule") return;
|
|
37
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
20
38
|
if (key in exports && exports[key] === _hooks[key]) return;
|
|
21
39
|
Object.defineProperty(exports, key, {
|
|
22
40
|
enumerable: true,
|
|
@@ -25,4 +43,5 @@ Object.keys(_hooks).forEach(function (key) {
|
|
|
25
43
|
}
|
|
26
44
|
});
|
|
27
45
|
});
|
|
46
|
+
var _NativeMmkv = require("./NativeMmkv");
|
|
28
47
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_MMKV","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_hooks"],"sourceRoot":"../../src","sources":["index.
|
|
1
|
+
{"version":3,"names":["_MMKV","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_hooks","_NativeMmkv"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,KAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,KAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,KAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,MAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,MAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,MAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,MAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAU,WAAA,GAAAd,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { NativeModules, Platform } from 'react-native';
|
|
2
|
+
const BULLET_POINT = '\n* ';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Lazily get a TurboModule by wrapping it in a Proxy.
|
|
6
|
+
*/
|
|
7
|
+
export function getLazyTurboModule(initializeTurboModule) {
|
|
8
|
+
const proxy = new Proxy({
|
|
9
|
+
module: null
|
|
10
|
+
}, {
|
|
11
|
+
get: (target, property) => {
|
|
12
|
+
if (target.module == null) {
|
|
13
|
+
// Target is null, let's initialize it!
|
|
14
|
+
target.module = initializeTurboModule();
|
|
15
|
+
if (target.module == null) {
|
|
16
|
+
// TurboModule not found, something went wrong!
|
|
17
|
+
if (global.__turboModuleProxy == null) {
|
|
18
|
+
// TurboModules are not available/new arch is not enabled.
|
|
19
|
+
// react-native-mmkv 3.x.x requires new arch (react-native >0.74)
|
|
20
|
+
// react-native-mmkv 2.x.x works on old arch (react-native <0.74)
|
|
21
|
+
throw new Error('Failed to create a new MMKV instance: react-native-mmkv 3.x.x requires TurboModules, but the new architecture is not enabled!' + BULLET_POINT + 'Downgrade to react-native-mmkv 2.x.x if you want to stay on the old architecture.' + BULLET_POINT + 'Enable the new architecture in your app to use react-native-mmkv 3.x.x. (See https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md)');
|
|
22
|
+
}
|
|
23
|
+
const message = 'Failed to create a new MMKV instance: The native MMKV Module could not be found.';
|
|
24
|
+
const suggestions = [];
|
|
25
|
+
suggestions.push('Make sure react-native-mmkv is correctly autolinked (run `npx react-native config` to verify)');
|
|
26
|
+
suggestions.push('Make sure you enabled the new architecture (TurboModules) and CodeGen properly generated the react-native-mmkv specs. See https://github.com/reactwg/react-native-new-architecture/blob/main/docs/enable-apps.md');
|
|
27
|
+
suggestions.push('Make sure you are using react-native 0.74.0 or higher, because react-native-mmkv is a C++ TurboModule.');
|
|
28
|
+
suggestions.push('Make sure you rebuilt the app.');
|
|
29
|
+
switch (Platform.OS) {
|
|
30
|
+
case 'ios':
|
|
31
|
+
case 'macos':
|
|
32
|
+
suggestions.push('Make sure you ran `pod install` in the ios/ directory.');
|
|
33
|
+
break;
|
|
34
|
+
case 'android':
|
|
35
|
+
suggestions.push('Make sure gradle is synced.');
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
throw new Error(`MMKV is not supported on ${Platform.OS}!`);
|
|
39
|
+
}
|
|
40
|
+
// check if Expo
|
|
41
|
+
const ExpoConstants = NativeModules.NativeUnimoduleProxy?.modulesConstants?.ExponentConstants;
|
|
42
|
+
if (ExpoConstants != null) {
|
|
43
|
+
if (ExpoConstants.appOwnership === 'expo') {
|
|
44
|
+
// We're running Expo Go
|
|
45
|
+
throw new Error('react-native-mmkv is not supported in Expo Go! Use EAS (`expo prebuild`) or eject to a bare workflow instead.');
|
|
46
|
+
} else {
|
|
47
|
+
// We're running Expo bare / standalone
|
|
48
|
+
suggestions.push('Make sure you ran `expo prebuild`.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const error = message + BULLET_POINT + suggestions.join(BULLET_POINT);
|
|
52
|
+
throw new Error(error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return target.module[property];
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return proxy;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=LazyTurboModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","BULLET_POINT","getLazyTurboModule","initializeTurboModule","proxy","Proxy","module","get","target","property","global","__turboModuleProxy","Error","message","suggestions","push","OS","ExpoConstants","NativeUnimoduleProxy","modulesConstants","ExponentConstants","appOwnership","error","join"],"sourceRoot":"../../src","sources":["LazyTurboModule.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAqB,cAAc;AAWnE,MAAMC,YAAY,GAAG,MAAM;;AAE3B;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,qBAAqC,EAClC;EACH,MAAMC,KAAK,GAAG,IAAIC,KAAK,CACrB;IACEC,MAAM,EAAE;EACV,CAAC,EACD;IACEC,GAAG,EAAEA,CAACC,MAAM,EAAEC,QAAQ,KAAK;MACzB,IAAID,MAAM,CAACF,MAAM,IAAI,IAAI,EAAE;QACzB;QACAE,MAAM,CAACF,MAAM,GAAGH,qBAAqB,CAAC,CAAC;QAEvC,IAAIK,MAAM,CAACF,MAAM,IAAI,IAAI,EAAE;UACzB;UACA,IAAII,MAAM,CAACC,kBAAkB,IAAI,IAAI,EAAE;YACrC;YACA;YACA;YACA,MAAM,IAAIC,KAAK,CACb,+HAA+H,GAC7HX,YAAY,GACZ,mFAAmF,GACnFA,YAAY,GACZ,sKACJ,CAAC;UACH;UAEA,MAAMY,OAAO,GACX,kFAAkF;UACpF,MAAMC,WAAqB,GAAG,EAAE;UAChCA,WAAW,CAACC,IAAI,CACd,+FACF,CAAC;UACDD,WAAW,CAACC,IAAI,CACd,kNACF,CAAC;UACDD,WAAW,CAACC,IAAI,CACd,wGACF,CAAC;UACDD,WAAW,CAACC,IAAI,CAAC,gCAAgC,CAAC;UAClD,QAAQf,QAAQ,CAACgB,EAAE;YACjB,KAAK,KAAK;YACV,KAAK,OAAO;cACVF,WAAW,CAACC,IAAI,CACd,wDACF,CAAC;cACD;YACF,KAAK,SAAS;cACZD,WAAW,CAACC,IAAI,CAAC,6BAA6B,CAAC;cAC/C;YACF;cACE,MAAM,IAAIH,KAAK,CAAE,4BAA2BZ,QAAQ,CAACgB,EAAG,GAAE,CAAC;UAC/D;UACA;UACA,MAAMC,aAAa,GACjBlB,aAAa,CAACmB,oBAAoB,EAAEC,gBAAgB,EAChDC,iBAAiB;UACvB,IAAIH,aAAa,IAAI,IAAI,EAAE;YACzB,IAAIA,aAAa,CAACI,YAAY,KAAK,MAAM,EAAE;cACzC;cACA,MAAM,IAAIT,KAAK,CACb,+GACF,CAAC;YACH,CAAC,MAAM;cACL;cACAE,WAAW,CAACC,IAAI,CAAC,oCAAoC,CAAC;YACxD;UACF;UAEA,MAAMO,KAAK,GACTT,OAAO,GAAGZ,YAAY,GAAGa,WAAW,CAACS,IAAI,CAACtB,YAAY,CAAC;UACzD,MAAM,IAAIW,KAAK,CAACU,KAAK,CAAC;QACxB;MACF;MAEA,OAAOd,MAAM,CAACF,MAAM,CAACG,QAAQ,CAAY;IAC3C;EACF,CACF,CAAC;EACD,OAAOL,KAAK;AACd","ignoreList":[]}
|