react-native-mmkv 2.12.2 → 3.0.0-beta.2
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/LICENSE +1 -200
- package/MMKV/Core/Core.xcodeproj/project.pbxproj +4 -2
- package/MMKV/Core/MMKVPredef.h +1 -1
- package/MMKV/Core/MMKV_IO.cpp +5 -1
- package/MMKV/Core/MemoryFile.cpp +1 -0
- package/MMKV/Core/MemoryFile_OSX.cpp +2 -1
- package/MMKV/README.md +8 -8
- package/README.md +35 -4
- package/android/CMakeLists.txt +20 -28
- package/android/build.gradle +59 -89
- package/android/gradle.properties +4 -5
- package/android/src/main/AndroidManifest.xml +2 -2
- package/android/src/{hasNamespace/AndroidManifest.xml → main/AndroidManifestNew.xml} +0 -1
- package/android/src/main/cpp/AndroidLogger.cpp +16 -0
- package/android/src/main/cpp/cpp-adapter.cpp +4 -80
- package/android/src/main/java/com/mrousavy/mmkv/MmkvPackage.java +44 -0
- package/android/src/main/java/com/mrousavy/mmkv/MmkvPlatformContextModule.java +17 -0
- package/cpp/Logger.h +35 -0
- package/cpp/MMKVManagedBuffer.h +32 -0
- package/{android/src/main/cpp → cpp}/MmkvHostObject.cpp +126 -63
- package/{android/src/main/cpp → cpp}/MmkvHostObject.h +9 -3
- package/cpp/NativeMmkvModule.cpp +46 -0
- package/cpp/NativeMmkvModule.h +37 -0
- package/ios/AppleLogger.mm +16 -0
- package/ios/MmkvOnLoad.mm +25 -0
- package/ios/MmkvPlatformContext.h +19 -0
- package/ios/MmkvPlatformContextModule.mm +37 -0
- package/lib/commonjs/LazyTurboModule.js +49 -0
- package/lib/commonjs/LazyTurboModule.js.map +1 -0
- package/lib/commonjs/MMKV.js +28 -4
- package/lib/commonjs/MMKV.js.map +1 -1
- package/lib/commonjs/NativeMmkv.js +35 -0
- package/lib/commonjs/NativeMmkv.js.map +1 -0
- package/lib/commonjs/NativeMmkvPlatformContext.js +13 -0
- package/lib/commonjs/NativeMmkvPlatformContext.js.map +1 -0
- 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 +6 -43
- package/lib/commonjs/createMMKV.js.map +1 -1
- package/lib/commonjs/createMMKV.mock.js +5 -1
- package/lib/commonjs/createMMKV.mock.js.map +1 -1
- package/lib/commonjs/createMMKV.web.js +8 -4
- package/lib/commonjs/createMMKV.web.js.map +1 -1
- package/lib/commonjs/createTextEncoder.js.map +1 -1
- package/lib/commonjs/hooks.js +11 -10
- package/lib/commonjs/hooks.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/LazyTurboModule.js +43 -0
- package/lib/module/LazyTurboModule.js.map +1 -0
- package/lib/module/MMKV.js +16 -4
- package/lib/module/MMKV.js.map +1 -1
- package/lib/module/NativeMmkv.js +32 -0
- package/lib/module/NativeMmkv.js.map +1 -0
- package/lib/module/NativeMmkvPlatformContext.js +7 -0
- package/lib/module/NativeMmkvPlatformContext.js.map +1 -0
- 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 +6 -43
- package/lib/module/createMMKV.js.map +1 -1
- package/lib/module/createMMKV.mock.js +5 -1
- package/lib/module/createMMKV.mock.js.map +1 -1
- package/lib/module/createMMKV.web.js +6 -4
- package/lib/module/createMMKV.web.js.map +1 -1
- package/lib/module/createTextEncoder.js.map +1 -1
- package/lib/module/hooks.js +7 -2
- package/lib/module/hooks.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/LazyTurboModule.d.ts +6 -0
- package/lib/typescript/src/LazyTurboModule.d.ts.map +1 -0
- package/lib/typescript/src/MMKV.d.ts +35 -0
- package/lib/typescript/src/MMKV.d.ts.map +1 -0
- package/lib/typescript/src/NativeMmkv.d.ts +83 -0
- package/lib/typescript/src/NativeMmkv.d.ts.map +1 -0
- package/lib/typescript/src/NativeMmkvPlatformContext.d.ts +9 -0
- package/lib/typescript/src/NativeMmkvPlatformContext.d.ts.map +1 -0
- package/lib/typescript/src/PlatformChecker.d.ts.map +1 -0
- package/lib/typescript/src/Types.d.ts +86 -0
- package/lib/typescript/src/Types.d.ts.map +1 -0
- package/lib/typescript/src/__tests__/hooks.test.d.ts +2 -0
- package/lib/typescript/src/__tests__/hooks.test.d.ts.map +1 -0
- package/lib/typescript/src/createMMKV.d.ts +4 -0
- package/lib/typescript/src/createMMKV.d.ts.map +1 -0
- package/lib/typescript/src/createMMKV.mock.d.ts +3 -0
- package/lib/typescript/src/createMMKV.mock.d.ts.map +1 -0
- package/lib/typescript/src/createMMKV.web.d.ts +4 -0
- package/lib/typescript/src/createMMKV.web.d.ts.map +1 -0
- package/lib/typescript/src/createTextEncoder.d.ts.map +1 -0
- package/lib/typescript/{hooks.d.ts → src/hooks.d.ts} +7 -4
- package/lib/typescript/src/hooks.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/package.json +52 -40
- package/react-native-mmkv.podspec +17 -18
- package/react-native.config.js +20 -0
- package/src/LazyTurboModule.ts +62 -0
- package/src/MMKV.ts +19 -132
- package/src/NativeMmkv.ts +105 -0
- package/src/NativeMmkvPlatformContext.ts +14 -0
- package/src/Types.ts +89 -0
- package/src/__tests__/hooks.test.tsx +89 -0
- package/src/createMMKV.mock.ts +7 -3
- package/src/createMMKV.ts +10 -65
- package/src/createMMKV.web.ts +7 -2
- package/src/hooks.ts +17 -11
- package/android/src/main/java/com/reactnativemmkv/MmkvModule.java +0 -49
- package/android/src/main/java/com/reactnativemmkv/MmkvPackage.java +0 -26
- package/cpp/TypedArray.cpp +0 -322
- package/cpp/TypedArray.h +0 -153
- package/ios/JSIUtils.h +0 -38
- package/ios/JSIUtils.mm +0 -167
- package/ios/Mmkv.xcodeproj/project.pbxproj +0 -291
- package/ios/MmkvHostObject.h +0 -27
- package/ios/MmkvHostObject.mm +0 -295
- package/ios/MmkvModule.h +0 -5
- package/ios/MmkvModule.mm +0 -101
- package/lib/typescript/MMKV.d.ts +0 -142
- package/lib/typescript/MMKV.d.ts.map +0 -1
- package/lib/typescript/PlatformChecker.d.ts.map +0 -1
- package/lib/typescript/createMMKV.d.ts +0 -7
- package/lib/typescript/createMMKV.d.ts.map +0 -1
- package/lib/typescript/createMMKV.mock.d.ts +0 -3
- package/lib/typescript/createMMKV.mock.d.ts.map +0 -1
- package/lib/typescript/createMMKV.web.d.ts +0 -3
- package/lib/typescript/createMMKV.web.d.ts.map +0 -1
- package/lib/typescript/createTextEncoder.d.ts.map +0 -1
- package/lib/typescript/hooks.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- /package/lib/typescript/{PlatformChecker.d.ts → src/PlatformChecker.d.ts} +0 -0
- /package/lib/typescript/{createTextEncoder.d.ts → src/createTextEncoder.d.ts} +0 -0
- /package/lib/typescript/{index.d.ts → src/index.d.ts} +0 -0
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
// !$*UTF8*$!
|
|
2
|
-
{
|
|
3
|
-
archiveVersion = 1;
|
|
4
|
-
classes = {
|
|
5
|
-
};
|
|
6
|
-
objectVersion = 46;
|
|
7
|
-
objects = {
|
|
8
|
-
|
|
9
|
-
/* Begin PBXBuildFile section */
|
|
10
|
-
B81384EA26E23A8500A8507D /* MmkvHostObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = B81384E926E23A8500A8507D /* MmkvHostObject.mm */; };
|
|
11
|
-
B8A8A9BE28F5797400345076 /* MmkvModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = B8A8A9BD28F5797400345076 /* MmkvModule.mm */; };
|
|
12
|
-
B8CC270225E65597009808A2 /* JSIUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = B8CC270125E65597009808A2 /* JSIUtils.mm */; };
|
|
13
|
-
/* End PBXBuildFile section */
|
|
14
|
-
|
|
15
|
-
/* Begin PBXCopyFilesBuildPhase section */
|
|
16
|
-
58B511D91A9E6C8500147676 /* CopyFiles */ = {
|
|
17
|
-
isa = PBXCopyFilesBuildPhase;
|
|
18
|
-
buildActionMask = 2147483647;
|
|
19
|
-
dstPath = "include/$(PRODUCT_NAME)";
|
|
20
|
-
dstSubfolderSpec = 16;
|
|
21
|
-
files = (
|
|
22
|
-
);
|
|
23
|
-
runOnlyForDeploymentPostprocessing = 0;
|
|
24
|
-
};
|
|
25
|
-
/* End PBXCopyFilesBuildPhase section */
|
|
26
|
-
|
|
27
|
-
/* Begin PBXFileReference section */
|
|
28
|
-
134814201AA4EA6300B7C361 /* libMmkv.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMmkv.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
29
|
-
B81384E926E23A8500A8507D /* MmkvHostObject.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MmkvHostObject.mm; sourceTree = "<group>"; };
|
|
30
|
-
B81384EB26E23A8D00A8507D /* MmkvHostObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MmkvHostObject.h; sourceTree = "<group>"; };
|
|
31
|
-
B8A8A9BC28F5797400345076 /* MmkvModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MmkvModule.h; sourceTree = "<group>"; };
|
|
32
|
-
B8A8A9BD28F5797400345076 /* MmkvModule.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MmkvModule.mm; sourceTree = "<group>"; };
|
|
33
|
-
B8A8A9BF28F5798100345076 /* cpp */ = {isa = PBXFileReference; lastKnownFileType = folder; name = cpp; path = ../cpp; sourceTree = "<group>"; };
|
|
34
|
-
B8CC270125E65597009808A2 /* JSIUtils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = JSIUtils.mm; sourceTree = "<group>"; };
|
|
35
|
-
B8CC270425E655AD009808A2 /* JSIUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSIUtils.h; sourceTree = "<group>"; };
|
|
36
|
-
/* End PBXFileReference section */
|
|
37
|
-
|
|
38
|
-
/* Begin PBXFrameworksBuildPhase section */
|
|
39
|
-
58B511D81A9E6C8500147676 /* Frameworks */ = {
|
|
40
|
-
isa = PBXFrameworksBuildPhase;
|
|
41
|
-
buildActionMask = 2147483647;
|
|
42
|
-
files = (
|
|
43
|
-
);
|
|
44
|
-
runOnlyForDeploymentPostprocessing = 0;
|
|
45
|
-
};
|
|
46
|
-
/* End PBXFrameworksBuildPhase section */
|
|
47
|
-
|
|
48
|
-
/* Begin PBXGroup section */
|
|
49
|
-
134814211AA4EA7D00B7C361 /* Products */ = {
|
|
50
|
-
isa = PBXGroup;
|
|
51
|
-
children = (
|
|
52
|
-
134814201AA4EA6300B7C361 /* libMmkv.a */,
|
|
53
|
-
);
|
|
54
|
-
name = Products;
|
|
55
|
-
sourceTree = "<group>";
|
|
56
|
-
};
|
|
57
|
-
58B511D21A9E6C8500147676 = {
|
|
58
|
-
isa = PBXGroup;
|
|
59
|
-
children = (
|
|
60
|
-
B81384EB26E23A8D00A8507D /* MmkvHostObject.h */,
|
|
61
|
-
B81384E926E23A8500A8507D /* MmkvHostObject.mm */,
|
|
62
|
-
B8CC270425E655AD009808A2 /* JSIUtils.h */,
|
|
63
|
-
B8CC270125E65597009808A2 /* JSIUtils.mm */,
|
|
64
|
-
B8A8A9BC28F5797400345076 /* MmkvModule.h */,
|
|
65
|
-
B8A8A9BD28F5797400345076 /* MmkvModule.mm */,
|
|
66
|
-
B8A8A9BF28F5798100345076 /* cpp */,
|
|
67
|
-
134814211AA4EA7D00B7C361 /* Products */,
|
|
68
|
-
);
|
|
69
|
-
sourceTree = "<group>";
|
|
70
|
-
};
|
|
71
|
-
/* End PBXGroup section */
|
|
72
|
-
|
|
73
|
-
/* Begin PBXNativeTarget section */
|
|
74
|
-
58B511DA1A9E6C8500147676 /* Mmkv */ = {
|
|
75
|
-
isa = PBXNativeTarget;
|
|
76
|
-
buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "Mmkv" */;
|
|
77
|
-
buildPhases = (
|
|
78
|
-
58B511D71A9E6C8500147676 /* Sources */,
|
|
79
|
-
58B511D81A9E6C8500147676 /* Frameworks */,
|
|
80
|
-
58B511D91A9E6C8500147676 /* CopyFiles */,
|
|
81
|
-
);
|
|
82
|
-
buildRules = (
|
|
83
|
-
);
|
|
84
|
-
dependencies = (
|
|
85
|
-
);
|
|
86
|
-
name = Mmkv;
|
|
87
|
-
productName = RCTDataManager;
|
|
88
|
-
productReference = 134814201AA4EA6300B7C361 /* libMmkv.a */;
|
|
89
|
-
productType = "com.apple.product-type.library.static";
|
|
90
|
-
};
|
|
91
|
-
/* End PBXNativeTarget section */
|
|
92
|
-
|
|
93
|
-
/* Begin PBXProject section */
|
|
94
|
-
58B511D31A9E6C8500147676 /* Project object */ = {
|
|
95
|
-
isa = PBXProject;
|
|
96
|
-
attributes = {
|
|
97
|
-
LastUpgradeCheck = 0920;
|
|
98
|
-
ORGANIZATIONNAME = Facebook;
|
|
99
|
-
TargetAttributes = {
|
|
100
|
-
58B511DA1A9E6C8500147676 = {
|
|
101
|
-
CreatedOnToolsVersion = 6.1.1;
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
};
|
|
105
|
-
buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "Mmkv" */;
|
|
106
|
-
compatibilityVersion = "Xcode 3.2";
|
|
107
|
-
developmentRegion = English;
|
|
108
|
-
hasScannedForEncodings = 0;
|
|
109
|
-
knownRegions = (
|
|
110
|
-
English,
|
|
111
|
-
en,
|
|
112
|
-
);
|
|
113
|
-
mainGroup = 58B511D21A9E6C8500147676;
|
|
114
|
-
productRefGroup = 58B511D21A9E6C8500147676;
|
|
115
|
-
projectDirPath = "";
|
|
116
|
-
projectRoot = "";
|
|
117
|
-
targets = (
|
|
118
|
-
58B511DA1A9E6C8500147676 /* Mmkv */,
|
|
119
|
-
);
|
|
120
|
-
};
|
|
121
|
-
/* End PBXProject section */
|
|
122
|
-
|
|
123
|
-
/* Begin PBXSourcesBuildPhase section */
|
|
124
|
-
58B511D71A9E6C8500147676 /* Sources */ = {
|
|
125
|
-
isa = PBXSourcesBuildPhase;
|
|
126
|
-
buildActionMask = 2147483647;
|
|
127
|
-
files = (
|
|
128
|
-
B81384EA26E23A8500A8507D /* MmkvHostObject.mm in Sources */,
|
|
129
|
-
B8A8A9BE28F5797400345076 /* MmkvModule.mm in Sources */,
|
|
130
|
-
B8CC270225E65597009808A2 /* JSIUtils.mm in Sources */,
|
|
131
|
-
);
|
|
132
|
-
runOnlyForDeploymentPostprocessing = 0;
|
|
133
|
-
};
|
|
134
|
-
/* End PBXSourcesBuildPhase section */
|
|
135
|
-
|
|
136
|
-
/* Begin XCBuildConfiguration section */
|
|
137
|
-
58B511ED1A9E6C8500147676 /* Debug */ = {
|
|
138
|
-
isa = XCBuildConfiguration;
|
|
139
|
-
buildSettings = {
|
|
140
|
-
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
141
|
-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
142
|
-
CLANG_CXX_LIBRARY = "libc++";
|
|
143
|
-
CLANG_ENABLE_MODULES = YES;
|
|
144
|
-
CLANG_ENABLE_OBJC_ARC = YES;
|
|
145
|
-
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
146
|
-
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
147
|
-
CLANG_WARN_COMMA = YES;
|
|
148
|
-
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
149
|
-
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
150
|
-
CLANG_WARN_EMPTY_BODY = YES;
|
|
151
|
-
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
152
|
-
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
153
|
-
CLANG_WARN_INT_CONVERSION = YES;
|
|
154
|
-
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
155
|
-
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
156
|
-
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
157
|
-
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
158
|
-
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
159
|
-
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
160
|
-
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
161
|
-
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
162
|
-
COPY_PHASE_STRIP = NO;
|
|
163
|
-
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
164
|
-
ENABLE_TESTABILITY = YES;
|
|
165
|
-
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
166
|
-
GCC_DYNAMIC_NO_PIC = NO;
|
|
167
|
-
GCC_NO_COMMON_BLOCKS = YES;
|
|
168
|
-
GCC_OPTIMIZATION_LEVEL = 0;
|
|
169
|
-
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
170
|
-
"DEBUG=1",
|
|
171
|
-
"$(inherited)",
|
|
172
|
-
);
|
|
173
|
-
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
|
174
|
-
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
175
|
-
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
176
|
-
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
177
|
-
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
178
|
-
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
179
|
-
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
180
|
-
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
181
|
-
MTL_ENABLE_DEBUG_INFO = YES;
|
|
182
|
-
ONLY_ACTIVE_ARCH = YES;
|
|
183
|
-
SDKROOT = iphoneos;
|
|
184
|
-
};
|
|
185
|
-
name = Debug;
|
|
186
|
-
};
|
|
187
|
-
58B511EE1A9E6C8500147676 /* Release */ = {
|
|
188
|
-
isa = XCBuildConfiguration;
|
|
189
|
-
buildSettings = {
|
|
190
|
-
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
191
|
-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
192
|
-
CLANG_CXX_LIBRARY = "libc++";
|
|
193
|
-
CLANG_ENABLE_MODULES = YES;
|
|
194
|
-
CLANG_ENABLE_OBJC_ARC = YES;
|
|
195
|
-
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
196
|
-
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
197
|
-
CLANG_WARN_COMMA = YES;
|
|
198
|
-
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
199
|
-
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
200
|
-
CLANG_WARN_EMPTY_BODY = YES;
|
|
201
|
-
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
202
|
-
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
203
|
-
CLANG_WARN_INT_CONVERSION = YES;
|
|
204
|
-
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
205
|
-
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
206
|
-
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
207
|
-
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
208
|
-
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
209
|
-
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
210
|
-
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
211
|
-
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
212
|
-
COPY_PHASE_STRIP = YES;
|
|
213
|
-
ENABLE_NS_ASSERTIONS = NO;
|
|
214
|
-
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
215
|
-
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
216
|
-
GCC_NO_COMMON_BLOCKS = YES;
|
|
217
|
-
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
218
|
-
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
219
|
-
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
220
|
-
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
221
|
-
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
222
|
-
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
223
|
-
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
224
|
-
MTL_ENABLE_DEBUG_INFO = NO;
|
|
225
|
-
SDKROOT = iphoneos;
|
|
226
|
-
VALIDATE_PRODUCT = YES;
|
|
227
|
-
};
|
|
228
|
-
name = Release;
|
|
229
|
-
};
|
|
230
|
-
58B511F01A9E6C8500147676 /* Debug */ = {
|
|
231
|
-
isa = XCBuildConfiguration;
|
|
232
|
-
buildSettings = {
|
|
233
|
-
HEADER_SEARCH_PATHS = (
|
|
234
|
-
"$(inherited)",
|
|
235
|
-
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
236
|
-
"$(SRCROOT)/../../../React/**",
|
|
237
|
-
"$(SRCROOT)/../../react-native/React/**",
|
|
238
|
-
);
|
|
239
|
-
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
|
240
|
-
OTHER_LDFLAGS = "-ObjC";
|
|
241
|
-
PRODUCT_NAME = Mmkv;
|
|
242
|
-
SKIP_INSTALL = YES;
|
|
243
|
-
SWIFT_OBJC_BRIDGING_HEADER = "Mmkv-Bridging-Header.h";
|
|
244
|
-
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
245
|
-
SWIFT_VERSION = 5.0;
|
|
246
|
-
};
|
|
247
|
-
name = Debug;
|
|
248
|
-
};
|
|
249
|
-
58B511F11A9E6C8500147676 /* Release */ = {
|
|
250
|
-
isa = XCBuildConfiguration;
|
|
251
|
-
buildSettings = {
|
|
252
|
-
HEADER_SEARCH_PATHS = (
|
|
253
|
-
"$(inherited)",
|
|
254
|
-
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
255
|
-
"$(SRCROOT)/../../../React/**",
|
|
256
|
-
"$(SRCROOT)/../../react-native/React/**",
|
|
257
|
-
);
|
|
258
|
-
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
|
259
|
-
OTHER_LDFLAGS = "-ObjC";
|
|
260
|
-
PRODUCT_NAME = Mmkv;
|
|
261
|
-
SKIP_INSTALL = YES;
|
|
262
|
-
SWIFT_OBJC_BRIDGING_HEADER = "Mmkv-Bridging-Header.h";
|
|
263
|
-
SWIFT_VERSION = 5.0;
|
|
264
|
-
};
|
|
265
|
-
name = Release;
|
|
266
|
-
};
|
|
267
|
-
/* End XCBuildConfiguration section */
|
|
268
|
-
|
|
269
|
-
/* Begin XCConfigurationList section */
|
|
270
|
-
58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "Mmkv" */ = {
|
|
271
|
-
isa = XCConfigurationList;
|
|
272
|
-
buildConfigurations = (
|
|
273
|
-
58B511ED1A9E6C8500147676 /* Debug */,
|
|
274
|
-
58B511EE1A9E6C8500147676 /* Release */,
|
|
275
|
-
);
|
|
276
|
-
defaultConfigurationIsVisible = 0;
|
|
277
|
-
defaultConfigurationName = Release;
|
|
278
|
-
};
|
|
279
|
-
58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "Mmkv" */ = {
|
|
280
|
-
isa = XCConfigurationList;
|
|
281
|
-
buildConfigurations = (
|
|
282
|
-
58B511F01A9E6C8500147676 /* Debug */,
|
|
283
|
-
58B511F11A9E6C8500147676 /* Release */,
|
|
284
|
-
);
|
|
285
|
-
defaultConfigurationIsVisible = 0;
|
|
286
|
-
defaultConfigurationName = Release;
|
|
287
|
-
};
|
|
288
|
-
/* End XCConfigurationList section */
|
|
289
|
-
};
|
|
290
|
-
rootObject = 58B511D31A9E6C8500147676 /* Project object */;
|
|
291
|
-
}
|
package/ios/MmkvHostObject.h
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// MmkvHostObject.h
|
|
3
|
-
// Mmkv
|
|
4
|
-
//
|
|
5
|
-
// Created by Marc Rousavy on 03.09.21.
|
|
6
|
-
// Copyright © 2021 Facebook. All rights reserved.
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
#pragma once
|
|
10
|
-
|
|
11
|
-
#import <Foundation/Foundation.h>
|
|
12
|
-
#import <MMKV/MMKV.h>
|
|
13
|
-
#import <jsi/jsi.h>
|
|
14
|
-
|
|
15
|
-
using namespace facebook;
|
|
16
|
-
|
|
17
|
-
class JSI_EXPORT MmkvHostObject : public jsi::HostObject {
|
|
18
|
-
public:
|
|
19
|
-
MmkvHostObject(NSString* instanceId, NSString* path, NSString* cryptKey);
|
|
20
|
-
|
|
21
|
-
public:
|
|
22
|
-
jsi::Value get(jsi::Runtime&, const jsi::PropNameID& name) override;
|
|
23
|
-
std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime& rt) override;
|
|
24
|
-
|
|
25
|
-
private:
|
|
26
|
-
MMKV* instance;
|
|
27
|
-
};
|
package/ios/MmkvHostObject.mm
DELETED
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// MmkvHostObject.mm
|
|
3
|
-
// Mmkv
|
|
4
|
-
//
|
|
5
|
-
// Created by Marc Rousavy on 03.09.21.
|
|
6
|
-
// Copyright © 2021 Facebook. All rights reserved.
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
#import "MmkvHostObject.h"
|
|
10
|
-
#import "../cpp/TypedArray.h"
|
|
11
|
-
#import "JSIUtils.h"
|
|
12
|
-
#import <Foundation/Foundation.h>
|
|
13
|
-
#import <vector>
|
|
14
|
-
|
|
15
|
-
MmkvHostObject::MmkvHostObject(NSString* instanceId, NSString* path, NSString* cryptKey) {
|
|
16
|
-
NSData* cryptData = cryptKey == nil ? nil : [cryptKey dataUsingEncoding:NSUTF8StringEncoding];
|
|
17
|
-
|
|
18
|
-
// Get appGroup value from info.plist using key "AppGroup"
|
|
19
|
-
NSString* appGroup = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppGroup"];
|
|
20
|
-
if (appGroup == nil) {
|
|
21
|
-
instance = [MMKV mmkvWithID:instanceId cryptKey:cryptData rootPath:path];
|
|
22
|
-
} else {
|
|
23
|
-
if (path != nil) {
|
|
24
|
-
NSLog(@"Warning: `path` is ignored when `appGroup` is set!");
|
|
25
|
-
}
|
|
26
|
-
instance = [MMKV mmkvWithID:instanceId cryptKey:cryptData mode:MMKVMultiProcess];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (instance == nil) {
|
|
30
|
-
// Check if instanceId is invalid
|
|
31
|
-
if ([instanceId length] == 0) {
|
|
32
|
-
throw std::runtime_error("Failed to create MMKV instance! `id` cannot be empty!");
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Check if encryptionKey is invalid
|
|
36
|
-
if (cryptData != nil && [cryptData length] > 16) {
|
|
37
|
-
throw std::runtime_error(
|
|
38
|
-
"Failed to create MMKV instance! `encryptionKey` cannot be longer than 16 bytes!");
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (appGroup == nil) {
|
|
42
|
-
// Check if path is invalid
|
|
43
|
-
NSFileManager* fileManager = [[NSFileManager alloc] init];
|
|
44
|
-
bool pathExists = [fileManager fileExistsAtPath:path isDirectory:nil];
|
|
45
|
-
if (!pathExists) {
|
|
46
|
-
throw std::runtime_error(
|
|
47
|
-
"Failed to create MMKV instance! The given Storage Path does not exist!");
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
throw std::runtime_error("Failed to create MMKV instance!");
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
std::vector<jsi::PropNameID> MmkvHostObject::getPropertyNames(jsi::Runtime& rt) {
|
|
56
|
-
std::vector<jsi::PropNameID> result;
|
|
57
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("set")));
|
|
58
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("getBoolean")));
|
|
59
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("getBuffer")));
|
|
60
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("getString")));
|
|
61
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("getNumber")));
|
|
62
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("contains")));
|
|
63
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("delete")));
|
|
64
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("getAllKeys")));
|
|
65
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("deleteAll")));
|
|
66
|
-
result.push_back(jsi::PropNameID::forUtf8(rt, std::string("recrypt")));
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
jsi::Value MmkvHostObject::get(jsi::Runtime& runtime, const jsi::PropNameID& propNameId) {
|
|
71
|
-
auto propName = propNameId.utf8(runtime);
|
|
72
|
-
auto funcName = "MMKV." + propName;
|
|
73
|
-
|
|
74
|
-
if (propName == "set") {
|
|
75
|
-
// MMKV.set(key: string, value: string | number | bool)
|
|
76
|
-
return jsi::Function::createFromHostFunction(
|
|
77
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
78
|
-
2, // key, value
|
|
79
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
80
|
-
size_t count) -> jsi::Value {
|
|
81
|
-
if (!arguments[0].isString()) {
|
|
82
|
-
throw jsi::JSError(runtime,
|
|
83
|
-
"MMKV::set: First argument ('key') has to be of type string!");
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
auto keyName = convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
87
|
-
if (arguments[1].isBool()) {
|
|
88
|
-
// Set as boolean
|
|
89
|
-
[instance setBool:arguments[1].getBool() forKey:keyName];
|
|
90
|
-
} else if (arguments[1].isNumber()) {
|
|
91
|
-
// Set as number (double in JS)
|
|
92
|
-
[instance setDouble:arguments[1].getNumber() forKey:keyName];
|
|
93
|
-
} else if (arguments[1].isString()) {
|
|
94
|
-
// Set as UTF-8 string
|
|
95
|
-
auto stringValue = convertJSIStringToNSString(runtime, arguments[1].getString(runtime));
|
|
96
|
-
[instance setString:stringValue forKey:keyName];
|
|
97
|
-
} else if (arguments[1].isObject()) {
|
|
98
|
-
// object
|
|
99
|
-
auto object = arguments[1].asObject(runtime);
|
|
100
|
-
if (isTypedArray(runtime, object)) {
|
|
101
|
-
// Uint8Array
|
|
102
|
-
auto typedArray = getTypedArray(runtime, object);
|
|
103
|
-
auto bufferValue = typedArray.getBuffer(runtime);
|
|
104
|
-
auto data = [[NSData alloc] initWithBytes:bufferValue.data(runtime)
|
|
105
|
-
length:bufferValue.length(runtime)];
|
|
106
|
-
[instance setData:data forKey:keyName];
|
|
107
|
-
} else {
|
|
108
|
-
// unknown object
|
|
109
|
-
throw jsi::JSError(
|
|
110
|
-
runtime, "MMKV::set: 'value' argument is an object, but not of type Uint8Array!");
|
|
111
|
-
}
|
|
112
|
-
} else {
|
|
113
|
-
// Invalid type
|
|
114
|
-
throw jsi::JSError(
|
|
115
|
-
runtime, "Second argument ('value') has to be of type bool, number or string!");
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return jsi::Value::undefined();
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (propName == "getBoolean") {
|
|
123
|
-
// MMKV.getBoolean(key: string)
|
|
124
|
-
return jsi::Function::createFromHostFunction(
|
|
125
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
126
|
-
1, // key
|
|
127
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
128
|
-
size_t count) -> jsi::Value {
|
|
129
|
-
if (!arguments[0].isString()) {
|
|
130
|
-
throw jsi::JSError(runtime, "First argument ('key') has to be of type string!");
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
auto keyName = convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
134
|
-
BOOL hasValue;
|
|
135
|
-
auto value = [instance getBoolForKey:keyName defaultValue:false hasValue:&hasValue];
|
|
136
|
-
if (hasValue) {
|
|
137
|
-
return jsi::Value(value == true);
|
|
138
|
-
} else {
|
|
139
|
-
return jsi::Value::undefined();
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (propName == "getString") {
|
|
145
|
-
// MMKV.getString(key: string)
|
|
146
|
-
return jsi::Function::createFromHostFunction(
|
|
147
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
148
|
-
1, // key
|
|
149
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
150
|
-
size_t count) -> jsi::Value {
|
|
151
|
-
if (!arguments[0].isString()) {
|
|
152
|
-
throw jsi::JSError(runtime, "First argument ('key') has to be of type string!");
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
auto keyName = convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
156
|
-
auto value = [instance getStringForKey:keyName];
|
|
157
|
-
if (value != nil) {
|
|
158
|
-
return convertNSStringToJSIString(runtime, value);
|
|
159
|
-
} else {
|
|
160
|
-
return jsi::Value::undefined();
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if (propName == "getNumber") {
|
|
166
|
-
// MMKV.getNumber(key: string)
|
|
167
|
-
return jsi::Function::createFromHostFunction(
|
|
168
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
169
|
-
1, // key
|
|
170
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
171
|
-
size_t count) -> jsi::Value {
|
|
172
|
-
if (!arguments[0].isString()) {
|
|
173
|
-
throw jsi::JSError(runtime, "First argument ('key') has to be of type string!");
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
auto keyName = convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
177
|
-
BOOL hasValue;
|
|
178
|
-
auto value = [instance getDoubleForKey:keyName defaultValue:0.0 hasValue:&hasValue];
|
|
179
|
-
if (hasValue) {
|
|
180
|
-
return jsi::Value(value);
|
|
181
|
-
} else {
|
|
182
|
-
return jsi::Value::undefined();
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
if (propName == "getBuffer") {
|
|
188
|
-
// MMKV.getBuffer(key: string)
|
|
189
|
-
return jsi::Function::createFromHostFunction(
|
|
190
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
191
|
-
1, // key
|
|
192
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
193
|
-
size_t count) -> jsi::Value {
|
|
194
|
-
if (!arguments[0].isString()) {
|
|
195
|
-
throw jsi::JSError(runtime, "First argument ('key') has to be of type string!");
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
auto keyName = convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
199
|
-
auto data = [instance getDataForKey:keyName];
|
|
200
|
-
if (data != nil) {
|
|
201
|
-
TypedArray<TypedArrayKind::Uint8Array> array(runtime, data.length);
|
|
202
|
-
auto charArray = static_cast<const unsigned char*>([data bytes]);
|
|
203
|
-
std::vector<unsigned char> vector(data.length);
|
|
204
|
-
vector.assign(charArray, charArray + data.length);
|
|
205
|
-
array.update(runtime, vector);
|
|
206
|
-
return array;
|
|
207
|
-
} else {
|
|
208
|
-
return jsi::Value::undefined();
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
if (propName == "contains") {
|
|
214
|
-
// MMKV.contains(key: string)
|
|
215
|
-
return jsi::Function::createFromHostFunction(
|
|
216
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
217
|
-
1, // key
|
|
218
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
219
|
-
size_t count) -> jsi::Value {
|
|
220
|
-
if (!arguments[0].isString()) {
|
|
221
|
-
throw jsi::JSError(runtime, "First argument ('key') has to be of type string!");
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
auto keyName = convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
225
|
-
bool containsKey = [instance containsKey:keyName];
|
|
226
|
-
return jsi::Value(containsKey);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
if (propName == "delete") {
|
|
231
|
-
// MMKV.delete(key: string)
|
|
232
|
-
return jsi::Function::createFromHostFunction(
|
|
233
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
234
|
-
1, // key
|
|
235
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
236
|
-
size_t count) -> jsi::Value {
|
|
237
|
-
if (!arguments[0].isString()) {
|
|
238
|
-
throw jsi::JSError(runtime, "First argument ('key') has to be of type string!");
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
auto keyName = convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
242
|
-
[instance removeValueForKey:keyName];
|
|
243
|
-
return jsi::Value::undefined();
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
if (propName == "getAllKeys") {
|
|
248
|
-
// MMKV.getAllKeys()
|
|
249
|
-
return jsi::Function::createFromHostFunction(
|
|
250
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName), 0,
|
|
251
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
252
|
-
size_t count) -> jsi::Value {
|
|
253
|
-
auto keys = [instance allKeys];
|
|
254
|
-
return convertNSArrayToJSIArray(runtime, keys);
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
if (propName == "clearAll") {
|
|
259
|
-
// MMKV.clearAll()
|
|
260
|
-
return jsi::Function::createFromHostFunction(
|
|
261
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName), 0,
|
|
262
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
263
|
-
size_t count) -> jsi::Value {
|
|
264
|
-
[instance clearAll];
|
|
265
|
-
return jsi::Value::undefined();
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
if (propName == "recrypt") {
|
|
270
|
-
// MMKV.recrypt(encryptionKey)
|
|
271
|
-
return jsi::Function::createFromHostFunction(
|
|
272
|
-
runtime, jsi::PropNameID::forAscii(runtime, funcName),
|
|
273
|
-
1, // encryptionKey
|
|
274
|
-
[this](jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* arguments,
|
|
275
|
-
size_t count) -> jsi::Value {
|
|
276
|
-
if (arguments[0].isUndefined()) {
|
|
277
|
-
// reset encryption key to "no encryption"
|
|
278
|
-
[instance reKey:nil];
|
|
279
|
-
} else if (arguments[0].isString()) {
|
|
280
|
-
// reKey(..) with new encryption-key
|
|
281
|
-
NSString* encryptionKey =
|
|
282
|
-
convertJSIStringToNSString(runtime, arguments[0].getString(runtime));
|
|
283
|
-
NSData* encryptionKeyBytes = [encryptionKey dataUsingEncoding:NSUTF8StringEncoding];
|
|
284
|
-
[instance reKey:encryptionKeyBytes];
|
|
285
|
-
} else {
|
|
286
|
-
throw jsi::JSError(
|
|
287
|
-
runtime,
|
|
288
|
-
"First argument ('encryptionKey') has to be of type string (or undefined)!");
|
|
289
|
-
}
|
|
290
|
-
return jsi::Value::undefined();
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
return jsi::Value::undefined();
|
|
295
|
-
}
|