From 4e9ecf237a11f12875dd088ab5f64c68a68dcaa5 Mon Sep 17 00:00:00 2001 From: ammarahm-ed Date: Thu, 3 Jun 2021 13:30:41 +0500 Subject: [PATCH] convert array properly while migrating on ios --- ios/MMKVNative.mm | 829 +++++++++++++++++++--------------------------- 1 file changed, 333 insertions(+), 496 deletions(-) diff --git a/ios/MMKVNative.mm b/ios/MMKVNative.mm index 2318f613..807b9e76 100644 --- a/ios/MMKVNative.mm +++ b/ios/MMKVNative.mm @@ -1,12 +1,11 @@ #import "MMKVNative.h" #import "YeetJSIUtils.h" +#import "SecureStorage.h" +#import #import #import #import -#import "SecureStorage.h" -#import - using namespace facebook; using namespace jsi; @@ -17,34 +16,26 @@ @implementation MMKVNative @synthesize methodQueue = _methodQueue; NSString *rPath = @""; NSMutableDictionary *mmkvInstances; -SecureStorage* _secureStorage; +SecureStorage *_secureStorage; RCT_EXPORT_MODULE() - - -+ (BOOL)requiresMainQueueSetup -{ - ++ (BOOL)requiresMainQueueSetup { + return YES; } - -MMKV *getInstance(NSString* ID) -{ +MMKV *getInstance(NSString *ID) { if ([[mmkvInstances allKeys] containsObject:ID]) { MMKV *kv = [mmkvInstances objectForKey:ID]; - return kv; } else { return NULL; } } - -- (void)setBridge:(RCTBridge *)bridge -{ +- (void)setBridge:(RCTBridge *)bridge { _bridge = bridge; _setBridgeOnMainQueue = RCTIsMainQueue(); [self installLibrary]; @@ -53,23 +44,27 @@ - (void)setBridge:(RCTBridge *)bridge - (void)installLibrary { RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge; - + if (!cxxBridge.runtime) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), + dispatch_get_main_queue(), ^{ /** - When refreshing the app while debugging, the setBridge method is called - too soon. The runtime is not ready yet quite often. We need to install library as soon as runtime becomes available. + When refreshing the app while debugging, the setBridge + method is called too soon. The runtime is not ready yet + quite often. We need to install library as soon as runtime + becomes available. */ [self installLibrary]; }); return; } - + mmkvInstances = [NSMutableDictionary dictionary]; - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); - NSString *libraryPath = (NSString *) [paths firstObject]; + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, + NSUserDomainMask, YES); + NSString *libraryPath = (NSString *)[paths firstObject]; NSString *rootDir = [libraryPath stringByAppendingPathComponent:@"mmkv"]; rPath = rootDir; _secureStorage = [[SecureStorage alloc] init]; @@ -78,43 +73,32 @@ - (void)installLibrary { [self migrate]; } - - -MMKV *createInstance(NSString* ID, MMKVMode mode, NSString* key, NSString* path) -{ +MMKV *createInstance(NSString *ID, MMKVMode mode, NSString *key, + NSString *path) { MMKV *kv; - if (![key isEqual: @""] && [path isEqual: @""]) - { + if (![key isEqual:@""] && [path isEqual:@""]) { NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; kv = [MMKV mmkvWithID:ID cryptKey:cryptKey mode:mode]; - } - else if (![path isEqual: @""] && [key isEqual: @""]) - { + } else if (![path isEqual:@""] && [key isEqual:@""]) { kv = [MMKV mmkvWithID:ID mode:mode]; - } - else if (![path isEqual: @""] && ![key isEqual: @""]) - { + } else if (![path isEqual:@""] && ![key isEqual:@""]) { NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; kv = [MMKV mmkvWithID:ID cryptKey:cryptKey mode:mode]; - } - else - { + } else { kv = [MMKV mmkvWithID:ID mode:mode]; } [mmkvInstances setObject:kv forKey:ID]; return kv; } - -void setIndex(MMKV *kv, NSString* type, NSString* key) { +void setIndex(MMKV *kv, NSString *type, NSString *key) { NSMutableArray *indexer = [NSMutableArray array]; if ([kv containsKey:type]) { - indexer = - [kv getObjectOfClass:NSMutableArray.class forKey:type]; + indexer = [kv getObjectOfClass:NSMutableArray.class forKey:type]; } if (![indexer containsObject:key]) { [indexer addObject:key]; @@ -122,7 +106,7 @@ void setIndex(MMKV *kv, NSString* type, NSString* key) { } } -NSMutableArray* getIndex(MMKV *kv, NSString* type) { +NSMutableArray *getIndex(MMKV *kv, NSString *type) { NSMutableArray *indexer = [NSMutableArray array]; @@ -133,7 +117,7 @@ void setIndex(MMKV *kv, NSString* type, NSString* key) { } } -void removeKeyFromIndexer(MMKV *kv, NSString* key) { +void removeKeyFromIndexer(MMKV *kv, NSString *key) { NSMutableArray *index = getIndex(kv, @"stringIndex"); @@ -181,266 +165,205 @@ void removeKeyFromIndexer(MMKV *kv, NSString* key) { } } - -static void install(jsi::Runtime & jsiRuntime) -{ - - auto initializeMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "initializeMMKV"), - 0, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, +static void install(jsi::Runtime &jsiRuntime) { + + auto initializeMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "initializeMMKV"), 0, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { - [MMKV initializeMMKV:rPath]; return Value::undefined(); }); - jsiRuntime.global().setProperty(jsiRuntime, "initializeMMKV", move(initializeMMKV)); + jsiRuntime.global().setProperty(jsiRuntime, "initializeMMKV", + move(initializeMMKV)); - auto setupMMKVInstance = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "setupMMKVInstance"), - 4, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto setupMMKVInstance = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "setupMMKVInstance"), 4, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { - NSString* ID = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *ID = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); MMKVMode mode = (MMKVMode)(int)arguments[1].getNumber(); - NSString* cryptKey = convertJSIStringToNSString(runtime, arguments[2].getString( - runtime)); + NSString *cryptKey = convertJSIStringToNSString( + runtime, arguments[2].getString(runtime)); + NSString *path = convertJSIStringToNSString( + runtime, arguments[3].getString(runtime)); - NSString* path = convertJSIStringToNSString(runtime, arguments[3].getString( - runtime)); - - createInstance(ID, mode, - cryptKey, - path); + createInstance(ID, mode, cryptKey, path); return Value(true); }); - jsiRuntime.global().setProperty(jsiRuntime, "setupMMKVInstance", move(setupMMKVInstance)); + jsiRuntime.global().setProperty(jsiRuntime, "setupMMKVInstance", + move(setupMMKVInstance)); - auto setStringMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "setStringMMKV"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto setStringMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "setStringMMKV"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[2].getString( - runtime))); + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[2].getString(runtime))); - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); setIndex(kv, @"stringIndex", key); - [kv setString:convertJSIStringToNSString(runtime, arguments[1].getString( - runtime)) forKey:key]; + [kv setString:convertJSIStringToNSString( + runtime, arguments[1].getString(runtime)) + forKey:key]; return Value(true); }); + jsiRuntime.global().setProperty(jsiRuntime, "setStringMMKV", + move(setStringMMKV)); - - jsiRuntime.global().setProperty(jsiRuntime, "setStringMMKV", move(setStringMMKV)); - - - - - auto getStringMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "getStringMMKV"), - 2, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto getStringMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "getStringMMKV"), 2, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); if ([kv containsKey:key]) { - return Value(convertNSStringToJSIString(runtime, [kv getStringForKey:key])); + return Value( + convertNSStringToJSIString(runtime, [kv getStringForKey:key])); } else { return Value::null(); } - - - }); - jsiRuntime.global().setProperty(jsiRuntime, "getStringMMKV", move(getStringMMKV)); + jsiRuntime.global().setProperty(jsiRuntime, "getStringMMKV", + move(getStringMMKV)); - auto setMapMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "setMapMMKV"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto setMapMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "setMapMMKV"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[2].getString( - runtime))); + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[2].getString(runtime))); - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); setIndex(kv, @"mapIndex", key); - [kv setString:convertJSIStringToNSString(runtime, arguments[1].getString( - runtime)) forKey:key]; + [kv setString:convertJSIStringToNSString( + runtime, arguments[1].getString(runtime)) + forKey:key]; return Value(true); }); - - jsiRuntime.global().setProperty(jsiRuntime, "setMapMMKV", move(setMapMMKV)); - - auto getMapMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "getMapMMKV"), - 2, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto getMapMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "getMapMMKV"), 2, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); if ([kv containsKey:key]) { - return Value(convertNSStringToJSIString(runtime, [kv getStringForKey:key])); + return Value( + convertNSStringToJSIString(runtime, [kv getStringForKey:key])); } else { return Value::null(); } - - - }); jsiRuntime.global().setProperty(jsiRuntime, "getMapMMKV", move(getMapMMKV)); - auto setArrayMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "setArrayMMKV"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto setArrayMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "setArrayMMKV"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[2].getString( - runtime))); + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[2].getString(runtime))); - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); setIndex(kv, @"arrayIndex", key); - [kv setString:convertJSIStringToNSString(runtime, arguments[1].getString( - runtime)) forKey:key]; + [kv setString:convertJSIStringToNSString( + runtime, arguments[1].getString(runtime)) + forKey:key]; return Value(true); }); + jsiRuntime.global().setProperty(jsiRuntime, "setArrayMMKV", + move(setArrayMMKV)); - - jsiRuntime.global().setProperty(jsiRuntime, "setArrayMMKV", move(setArrayMMKV)); - - - auto getArrayMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "getArrayMMKV"), - 2, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto getArrayMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "getArrayMMKV"), 2, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); if ([kv containsKey:key]) { - return Value(convertNSStringToJSIString(runtime, [kv getStringForKey:key])); + return Value( + convertNSStringToJSIString(runtime, [kv getStringForKey:key])); } else { return Value::null(); } - - - }); - jsiRuntime.global().setProperty(jsiRuntime, "getArrayMMKV", move(getArrayMMKV)); - + jsiRuntime.global().setProperty(jsiRuntime, "getArrayMMKV", + move(getArrayMMKV)); - auto setNumberMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "setNumberMMKV"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto setNumberMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "setNumberMMKV"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[2].getString( - runtime))); + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[2].getString(runtime))); - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); setIndex(kv, @"numberIndex", key); @@ -449,57 +372,46 @@ static void install(jsi::Runtime & jsiRuntime) return Value(true); }); - jsiRuntime.global().setProperty(jsiRuntime, "setNumberMMKV", move(setNumberMMKV)); + jsiRuntime.global().setProperty(jsiRuntime, "setNumberMMKV", + move(setNumberMMKV)); - - auto getNumberMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "getNumberMMKV"), - 2, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto getNumberMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "getNumberMMKV"), 2, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); if ([kv containsKey:key]) { - return Value( [kv getDoubleForKey:key]); + return Value([kv getDoubleForKey:key]); } else { return Value::null(); } - }); - jsiRuntime.global().setProperty(jsiRuntime, "getNumberMMKV", move(getNumberMMKV)); + jsiRuntime.global().setProperty(jsiRuntime, "getNumberMMKV", + move(getNumberMMKV)); - auto setBoolMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "setBoolMMKV"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto setBoolMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "setBoolMMKV"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[2].getString( - runtime))); + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[2].getString(runtime))); - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); setIndex(kv, @"boolIndex", key); @@ -508,154 +420,118 @@ static void install(jsi::Runtime & jsiRuntime) return Value(true); }); - - jsiRuntime.global().setProperty(jsiRuntime, "setBoolMMKV", move(setBoolMMKV)); - - auto getBoolMMKV = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "getBoolMMKV"), - 2, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, + auto getBoolMMKV = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "getBoolMMKV"), 2, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); if ([kv containsKey:key]) { return Value([kv getBoolForKey:key]); } else { return Value::null(); } - - - }); jsiRuntime.global().setProperty(jsiRuntime, "getBoolMMKV", move(getBoolMMKV)); - auto removeValueMMKV = jsi::Function::createFromHostFunction(jsiRuntime, - jsi::PropNameID::forAscii( - jsiRuntime, - "removeValueMMKV"), + auto removeValueMMKV = jsi::Function::createFromHostFunction( + jsiRuntime, jsi::PropNameID::forAscii(jsiRuntime, "removeValueMMKV"), 2, // key - [](jsi::Runtime &runtime, - const jsi::Value &thisValue, - const jsi::Value *arguments, - size_t count) -> jsi::Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); + [](jsi::Runtime &runtime, const jsi::Value &thisValue, + const jsi::Value *arguments, size_t count) -> jsi::Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); - if (!kv) - { + if (!kv) { return Value::undefined(); } - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); - + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); removeKeyFromIndexer(kv, key); [kv removeValueForKey:key]; return Value(true); }); - jsiRuntime.global().setProperty(jsiRuntime, "removeValueMMKV", std::move(removeValueMMKV)); - - - auto getAllKeysMMKV = jsi::Function::createFromHostFunction(jsiRuntime, - jsi::PropNameID::forAscii( - jsiRuntime, - "getAllKeysMMKV"), - 1, - [](jsi::Runtime &runtime, - const jsi::Value &thisValue, - const jsi::Value *arguments, - size_t count) -> jsi::Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[0].getString( - runtime))); - - if (!kv) - { + jsiRuntime.global().setProperty(jsiRuntime, "removeValueMMKV", + std::move(removeValueMMKV)); + + auto getAllKeysMMKV = jsi::Function::createFromHostFunction( + jsiRuntime, jsi::PropNameID::forAscii(jsiRuntime, "getAllKeysMMKV"), 1, + [](jsi::Runtime &runtime, const jsi::Value &thisValue, + const jsi::Value *arguments, size_t count) -> jsi::Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[0].getString(runtime))); + + if (!kv) { return Value::undefined(); } - NSArray* keys = [kv allKeys]; + NSArray *keys = [kv allKeys]; return Value(convertNSArrayToJSIArray(runtime, keys)); }); - jsiRuntime.global().setProperty(jsiRuntime, "getAllKeysMMKV", std::move(getAllKeysMMKV)); - - auto getIndexMMKV = jsi::Function::createFromHostFunction(jsiRuntime, - jsi::PropNameID::forAscii( - jsiRuntime, - "getIndexMMKV"), - 2, - [](jsi::Runtime &runtime, - const jsi::Value &thisValue, - const jsi::Value *arguments, - size_t count) -> jsi::Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - if (!kv) - { + jsiRuntime.global().setProperty(jsiRuntime, "getAllKeysMMKV", + std::move(getAllKeysMMKV)); + + auto getIndexMMKV = jsi::Function::createFromHostFunction( + jsiRuntime, jsi::PropNameID::forAscii(jsiRuntime, "getIndexMMKV"), 2, + [](jsi::Runtime &runtime, const jsi::Value &thisValue, + const jsi::Value *arguments, size_t count) -> jsi::Value { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); + if (!kv) { return Value::undefined(); } - NSMutableArray* keys = getIndex(kv, convertJSIStringToNSString(runtime, arguments[0].getString( - runtime))); + NSMutableArray *keys = + getIndex(kv, convertJSIStringToNSString( + runtime, arguments[0].getString(runtime))); return Value(convertNSArrayToJSIArray(runtime, keys)); }); - jsiRuntime.global().setProperty(jsiRuntime, "getIndexMMKV", std::move(getIndexMMKV)); - + jsiRuntime.global().setProperty(jsiRuntime, "getIndexMMKV", + std::move(getIndexMMKV)); - auto containsKeyMMKV = jsi::Function::createFromHostFunction(jsiRuntime, - jsi::PropNameID::forAscii( - jsiRuntime, - "containsKeyMMKV"), - 2, - [](jsi::Runtime &runtime, - const jsi::Value &thisValue, + auto containsKeyMMKV = jsi::Function::createFromHostFunction( + jsiRuntime, jsi::PropNameID::forAscii(jsiRuntime, "containsKeyMMKV"), 2, + [](jsi::Runtime &runtime, const jsi::Value &thisValue, const jsi::Value *arguments, size_t count) -> jsi::Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - if (!kv) - { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); + if (!kv) { return Value::undefined(); } - return Value([kv containsKey:convertJSIStringToNSString(runtime, arguments[0].getString( - runtime))]); + return Value( + [kv containsKey:convertJSIStringToNSString( + runtime, arguments[0].getString(runtime))]); }); - jsiRuntime.global().setProperty(jsiRuntime, "containsKeyMMKV", std::move(containsKeyMMKV)); - - auto clearMMKV = jsi::Function::createFromHostFunction(jsiRuntime, - jsi::PropNameID::forAscii( - jsiRuntime, - "clearMMKV"), - 1, - [](jsi::Runtime &runtime, - const jsi::Value &thisValue, + jsiRuntime.global().setProperty(jsiRuntime, "containsKeyMMKV", + std::move(containsKeyMMKV)); + + auto clearMMKV = jsi::Function::createFromHostFunction( + jsiRuntime, jsi::PropNameID::forAscii(jsiRuntime, "clearMMKV"), 1, + [](jsi::Runtime &runtime, const jsi::Value &thisValue, const jsi::Value *arguments, size_t count) -> jsi::Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[0].getString( - runtime))); - if (!kv) - { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[0].getString(runtime))); + if (!kv) { return Value::undefined(); } @@ -663,28 +539,23 @@ static void install(jsi::Runtime & jsiRuntime) return Value(true); }); - jsiRuntime.global().setProperty(jsiRuntime, "clearMMKV", std::move(clearMMKV)); - - auto encryptMMKV = jsi::Function::createFromHostFunction(jsiRuntime, - jsi::PropNameID::forAscii( - jsiRuntime, - "encryptMMKV"), - 2, - [](jsi::Runtime &runtime, - const jsi::Value &thisValue, + jsiRuntime.global().setProperty(jsiRuntime, "clearMMKV", + std::move(clearMMKV)); + + auto encryptMMKV = jsi::Function::createFromHostFunction( + jsiRuntime, jsi::PropNameID::forAscii(jsiRuntime, "encryptMMKV"), 2, + [](jsi::Runtime &runtime, const jsi::Value &thisValue, const jsi::Value *arguments, size_t count) -> jsi::Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - if (!kv) - { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); + if (!kv) { return Value::undefined(); } - - NSString* key = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; [kv reKey:cryptKey]; @@ -692,22 +563,18 @@ static void install(jsi::Runtime & jsiRuntime) return Value(true); }); - jsiRuntime.global().setProperty(jsiRuntime, "encryptMMKV", std::move(encryptMMKV)); + jsiRuntime.global().setProperty(jsiRuntime, "encryptMMKV", + std::move(encryptMMKV)); - auto decryptMMKV = jsi::Function::createFromHostFunction(jsiRuntime, - jsi::PropNameID::forAscii( - jsiRuntime, - "decryptMMKV"), - 2, - [](jsi::Runtime &runtime, - const jsi::Value &thisValue, + auto decryptMMKV = jsi::Function::createFromHostFunction( + jsiRuntime, jsi::PropNameID::forAscii(jsiRuntime, "decryptMMKV"), 2, + [](jsi::Runtime &runtime, const jsi::Value &thisValue, const jsi::Value *arguments, size_t count) -> jsi::Value { - MMKV *kv = getInstance(convertJSIStringToNSString(runtime, arguments[1].getString( - runtime))); - if (!kv) - { + MMKV *kv = getInstance(convertJSIStringToNSString( + runtime, arguments[1].getString(runtime))); + if (!kv) { return Value::undefined(); } @@ -716,196 +583,166 @@ static void install(jsi::Runtime & jsiRuntime) return Value(true); }); - jsiRuntime.global().setProperty(jsiRuntime, "decryptMMKV", std::move(decryptMMKV)); - + jsiRuntime.global().setProperty(jsiRuntime, "decryptMMKV", + std::move(decryptMMKV)); + // Secure Store - auto setSecureKey = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "setSecureKey"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, - size_t count) -> Value { - - - - NSString* alias = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); - NSString* key = convertJSIStringToNSString(runtime, arguments[1].getString( - runtime)); - NSString* accValue = convertJSIStringToNSString(runtime, arguments[2].getString( - runtime)); - [_secureStorage setSecureKey:alias value:key options:@{@"accessible":accValue}]; + auto setSecureKey = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "setSecureKey"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, + size_t count) -> Value { + NSString *alias = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); + NSString *key = convertJSIStringToNSString( + runtime, arguments[1].getString(runtime)); + NSString *accValue = convertJSIStringToNSString( + runtime, arguments[2].getString(runtime)); + [_secureStorage setSecureKey:alias + value:key + options:@{@"accessible" : accValue}]; return Value(true); }); + jsiRuntime.global().setProperty(jsiRuntime, "setSecureKey", + move(setSecureKey)); - - jsiRuntime.global().setProperty(jsiRuntime, "setSecureKey", move(setSecureKey)); - - auto getSecureKey = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "getSecureKey"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, - size_t count) -> Value { - - - - NSString* alias = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); - - + auto getSecureKey = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "getSecureKey"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, + size_t count) -> Value { + NSString *alias = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); - return Value(convertNSStringToJSIString(runtime, [_secureStorage getSecureKey:alias])); + return Value(convertNSStringToJSIString( + runtime, [_secureStorage getSecureKey:alias])); }); + jsiRuntime.global().setProperty(jsiRuntime, "getSecureKey", + move(getSecureKey)); - - jsiRuntime.global().setProperty(jsiRuntime, "getSecureKey", move(getSecureKey)); - - auto secureKeyExists = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "secureKeyExists"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, - size_t count) -> Value { - - - - NSString* alias = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + auto secureKeyExists = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "secureKeyExists"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, + size_t count) -> Value { + NSString *alias = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); return Value([_secureStorage secureKeyExists:alias]); }); + jsiRuntime.global().setProperty(jsiRuntime, "secureKeyExists", + move(secureKeyExists)); - - jsiRuntime.global().setProperty(jsiRuntime, "secureKeyExists", move(secureKeyExists)); - - auto removeSecureKey = Function::createFromHostFunction(jsiRuntime, - PropNameID::forAscii(jsiRuntime, - "removeSecureKey"), - 3, - [](Runtime &runtime, - const Value &thisValue, - const Value *arguments, - size_t count) -> Value { - - - - NSString* alias = convertJSIStringToNSString(runtime, arguments[0].getString( - runtime)); + auto removeSecureKey = Function::createFromHostFunction( + jsiRuntime, PropNameID::forAscii(jsiRuntime, "removeSecureKey"), 3, + [](Runtime &runtime, const Value &thisValue, const Value *arguments, + size_t count) -> Value { + NSString *alias = convertJSIStringToNSString( + runtime, arguments[0].getString(runtime)); [_secureStorage removeSecureKey:alias]; return Value(true); }); - - - jsiRuntime.global().setProperty(jsiRuntime, "removeSecureKey", move(removeSecureKey)); + jsiRuntime.global().setProperty(jsiRuntime, "removeSecureKey", + move(removeSecureKey)); // Secure Store End - } - - - - - - - (void)migrate { MMKV *kv = [MMKV mmkvWithID:@"mmkvIdStore"]; - [mmkvInstances setObject:kv forKey:@"mmkvIdStore"]; - if ([kv containsKey:@"mmkvIdData"]) { - NSMutableDictionary* oldStore = [kv getObjectOfClass:NSMutableDictionary.class forKey:@"mmkvIdData"]; - NSArray *keys = [oldStore allKeys]; + [mmkvInstances setObject:kv forKey:@"mmkvIdStore"]; + if ([kv containsKey:@"mmkvIdData"]) { + NSMutableDictionary *oldStore = + [kv getObjectOfClass:NSMutableDictionary.class forKey:@"mmkvIdData"]; + NSArray *keys = [oldStore allKeys]; + + for (int i = 0; i < keys.count; i++) { + NSString *storageKey = keys[i]; + NSMutableDictionary *entry = [oldStore objectForKey:storageKey]; + NSError *error; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:entry + options:0 + error:&error]; + NSString *jsonString = + [[NSString alloc] initWithData:jsonData + encoding:NSUTF8StringEncoding]; + [kv setString:jsonString forKey:storageKey]; - for (int i=0;i < keys.count;i++) { - NSString* storageKey =keys[i]; - NSMutableDictionary* entry = [oldStore objectForKey:storageKey]; - NSError *error; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:entry - options:0 - error:&error]; - NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - [kv setString:jsonString forKey:storageKey]; - - if ([[entry valueForKey:@"encrypted"] boolValue]) { - NSString *alias = [entry valueForKey:@"alias"] ; - if ([_secureStorage searchKeychainCopyMatchingExists:alias]) { - NSString* key = [_secureStorage searchKeychainCopyMatching:alias]; - if (key != nil) { - NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; - MMKV * kvv = [MMKV mmkvWithID:storageKey cryptKey:cryptKey mode:MMKVSingleProcess]; - [self writeToJson:kvv]; - } - - }; - } else { - MMKV * kvv = [MMKV mmkvWithID:storageKey mode:MMKVSingleProcess]; - [self writeToJson:kvv]; - } + if ([[entry valueForKey:@"encrypted"] boolValue]) { + NSString *alias = [entry valueForKey:@"alias"]; + if ([_secureStorage searchKeychainCopyMatchingExists:alias]) { + NSString *key = [_secureStorage searchKeychainCopyMatching:alias]; + if (key != nil) { + NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; + MMKV *kvv = [MMKV mmkvWithID:storageKey + cryptKey:cryptKey + mode:MMKVSingleProcess]; + [self writeToJson:kvv]; + } + }; + } else { + MMKV *kvv = [MMKV mmkvWithID:storageKey mode:MMKVSingleProcess]; + [self writeToJson:kvv]; } - + } + [kv removeValueForKey:@"mmkvIdData"]; } - } - (void)writeToJson:(MMKV *)kv { - NSArray* mapIndex = getIndex(kv, @"mapIndex"); + NSArray *mapIndex = getIndex(kv, @"mapIndex"); if (mapIndex != nil) { for (NSString *key in mapIndex) { NSDictionary *data = [kv getObjectOfClass:NSDictionary.class forKey:key]; if (data != nil) { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data - options:0 - error:&error]; - NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + options:0 + error:&error]; + NSString *jsonString = + [[NSString alloc] initWithData:jsonData + encoding:NSUTF8StringEncoding]; [kv setString:jsonString forKey:key]; } - } + } } - - NSArray* arrayIndex = getIndex(kv, @"arrayIndex"); + NSArray *arrayIndex = getIndex(kv, @"arrayIndex"); if (arrayIndex != nil) { for (NSString *key in arrayIndex) { - NSMutableArray *data = - [kv getObjectOfClass:NSMutableArray.class forKey:key]; - if (data != nil) { - NSError *error; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data - options:0 - error:&error]; - NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - [kv setString:jsonString forKey:key]; - } + NSDictionary *data = + [kv getObjectOfClass:NSDictionary.class forKey:key]; - } + if (data != nil) { + NSMutableArray *array = [data objectForKey:key]; + if (array != nil) { + NSError *error; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:array + options:0 + error:&error]; + NSString *jsonString = + [[NSString alloc] initWithData:jsonData + encoding:NSUTF8StringEncoding]; + [kv setString:jsonString forKey:key]; + } + } + } } - - NSArray* intIndex = [kv getObjectOfClass:NSMutableArray.class forKey:@"intIndex"]; + NSArray *intIndex = + [kv getObjectOfClass:NSMutableArray.class forKey:@"intIndex"]; if (intIndex != nil) { for (NSString *key in intIndex) { int64_t intVal = [kv getInt64ForKey:key]; [kv setDouble:double(intVal) forKey:key]; - } + } [kv setObject:intIndex forKey:@"numberIndex"]; [kv removeValueForKey:@"intIndex"]; } - } - @end